我在 SSD 上有一个约 90 MB 的 SQLite 数据库,主要由消息附件组成,其中包括 BLOB 列内容,用于存储二进制附件数据。
现在我发现以下查询
SELECT message_id FROM attachments WHERE length(content) IS NULL;
比原来快 500 倍(0.5 毫秒与 250 毫秒)
SELECT message_id FROM attachments WHERE content IS NULL;
这两个查询是否等效?
附加信息
- 除了自动索引之外,不涉及任何索引。
- 这不是缓存。结果可以从任意数量的 SQLite 进程以任意顺序无限次地再现。
在SQLite中,存储的是每列值的长度和类型在行的开头 http://www.sqlite.org/fileformat2.html#record_format。
这允许length()
and typeof()
要优化的函数以避免加载实际值。
IS NULL 运算符没有这样的优化(尽管可以实现它)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)