当前位置: 首页 > 面试题库 >

BLOB的'length()IS NULL'是否等效且比'IS NULL'更快?

年运珧
2023-03-14
问题内容

我在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;

这两个查询是否相等,这是真的吗?

附加信息

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

问题答案:

在SQLite中,每个列值的长度和类型存储在row的开头。这样可以优化length()typeof()功能,以避免加载实际值。

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



 类似资料:
  • 如果指定的值为 null ,则返回 true ;否则返回 false。 使用严格等号运算符来检查 val 值是否等于 null 。 const isNull = val => val === null; isNull(null); // true

  • 问题内容: 我有一个带有列和的表格。它们都是类型。我写了一个查询 我读了电子邮件作为,因为它是。 正如我从互联网上看到的那样,如果为NULL,那么它应该返回。但是它说不能翻译成。 我该如何纠正?为什么返回布尔值? 问题答案: 据此,这 不是在SQL Server CE中实现的。我希望看到出现语法错误。 解决方法:您可以使用或。最好是后者。 还可以使用参数化查询。如果您不知道为什么要学习,请学习。

  • 我有一个有多个列的数据框。我想遍历这些列,计算每列有多少空值,并生成一个新的数据框,在列标题名称旁边显示值的总和。 如果我这样做: 我得到每个列的空计数列表: 我想做的是创建一个新的数据帧,它的列标题和空计数并列,例如。

  • 问题内容: 我有以下几点: 如果@VariableEqualToZero为null,它将替换为1。如果@VariableEqualToZero = 0,也需要它替换为1。我该怎么做呢? 问题答案:

  • 如您所知,< code>java.util.Objects是 这个类由用于操作对象的静态实用程序方法组成。 其中一个方法是< code>Objects.isNull()。 我的理解是< code>Objects.isNull()会通过省略第二个< code>=来消除意外地将空值赋给object的可能性。 但是,API注释指出: 此方法存在,可用作谓词、筛选器(对象::isNull) 是否有任何原因

  • SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数 请看下面的 "Products" 表: P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder 1 Jarlsberg 10.45 16 15 2 Mascarpone 32.56 23 3 Gorgonzola 15.67 9 20 假如 "UnitsOnOr