我正在尝试查询具有 blob 列的表,并且需要过滤结果以仅提供在 blob 列中具有内容(任何内容)的行。
但是,执行 SELECT column_name FROM table_name WHERE blob_column IS NOT NULL
需要很长时间,我认为这是因为一些 blob 非常重。似乎 WHERE 子句正在读取 blob 的全部内容并将它们与 null
进行比较。
有没有一种方法可以在不让 sqlite 读取 blob 的全部内容的情况下测试 blob 列是否为空?
最佳答案
自 version 3.7.12 , 使用 length()或 typeof()函数避免读取二进制数据(查询要快得多)。所以为了避免不必要的开销,必须改变
SELECT column_name FROM table_name WHERE blob_column IS NOT NULL
到
SELECT column_name FROM table_name WHERE LENGTH(blob_column) IS NOT NULL
或
SELECT column_name FROM table_name WHERE TYPEOF(blob_column) != 'null'
关于sql - 如何在不完全读取 blob 的情况下测试 sqlite 表中的 blob 是否不为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43518213/