我有一个~90 MB的数据库,主要包括消息附件,包括BLOB列content,存储二进制附件数据.
我认为在BLOB上创建索引是不明智的,因此除了autoindex之外没有其他索引.
为了获得空的附件,我比较了以下查询:
SELECT message_id FROM attachments WHERE content IS NULL;
Run Code Online (Sandbox Code Playgroud)
和
SELECT message_id FROM attachments WHERE length(content) = 0;
Run Code Online (Sandbox Code Playgroud)
这导致我的用例中的行相同.
为什么第一个需要250ms而第二个只需1-2ms(两者都在SSD上)?这背后的原因是什么?有隐藏的长度索引还是什么?有任何见解赞赏.
附加信息
在EXPLAIN QUERY PLAN这两种情况下是
0 | 0 | 0 | SCAN TABLE附件
否定IS NOT NULL与length() != 0导致相同的性能差异250ms与2ms.
WHERE content IS NULL AND length(content) = 0;需要250 WHERE length(content) = 0 AND content IS NULL;毫秒,需要2毫秒.