我在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中,每个列值的长度和类型存储在row的开头。这样可以优化length()和typeof()功能,以避免加载实际值。
length()
typeof()
IS NULL运算符没有这种优化(尽管可以实现它)。