对于BLOB,'length()IS NULL'是否等效且快于'IS NULL'?

Sim*_*rta 7 sql sqlite

我在SSD上有一个~90 MB的SQLite数据库,主要包括消息附件,包括BLOB列内容,用于存储二进制附件数据.

现在我发现了以下查询

SELECT message_id FROM attachments WHERE length(content) IS NULL;
Run Code Online (Sandbox Code Playgroud)

比原始速度快500倍(0.5毫秒对250毫秒)

SELECT message_id FROM attachments WHERE content IS NULL;
Run Code Online (Sandbox Code Playgroud)

两个查询都是等价的,这是真的吗?

附加信息

  1. 除自动索引外,不涉及任何索引.
  2. 它不是缓存.可以从任意数量的SQLite进程以任何顺序无限次地重现结果.

CL.*_*CL. 4

在 SQLite 中,每列值的​​长度和类型存储在行的开头。这允许优化length()typeof()函数以避免加载实际值。

IS NULL 运算符没有这样的优化(尽管可以实现它)。