如何在不完全读取 blob 的情况下测试 sqlite 表中的 blob 是否不为空?

wal*_*ous 3 sql sqlite blob

我正在尝试查询具有 blob 列的表,并且需要过滤结果以仅提供在 blob 列中具有内容(任何内容)的行。

然而,这样做SELECT column_name FROM table_name WHERE blob_column IS NOT NULL需要很长时间,我认为这是因为一些斑点相当重。看起来 WHERE 子句正在读取 blob 的全部内容并将它们与null.

有没有办法在不让 sqlite 读取 blob 的全部内容的情况下测试 blob 列是否为空?

wal*_*ous 6

版本 3.7.12开始,使用length()typeof()函数可以避免读取二进制数据(查询速度更快)。因此,为了避免不必要的开销,必须进行更改

SELECT column_name FROM table_name WHERE blob_column IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

SELECT column_name FROM table_name WHERE LENGTH(blob_column) IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

或者

SELECT column_name FROM table_name WHERE TYPEOF(blob_column) != 'null'
Run Code Online (Sandbox Code Playgroud)

  • 哇!这是非常不直观的。 (2认同)