You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UNIQUE INDEX是否会索引NULL值?相关查询能否利用该索引?

关于唯一复合索引中NULL值的索引存储与查询使用问题

示例表结构

  • id INT PRIMARY KEY
  • firstName VARCHAR(20) NOT NULL
  • lastName VARCHAR(20) NULL
  • INDEX UNIQUE (firstName, lastName)

用户疑问

我理解当行中lastName IS NULL时,无论firstName取值如何,都不会触发唯一约束检查(因为NULL彼此不被视为相等)。但我想确认两个问题:

  1. 这些含NULL的行的相关值是否会被实际记录到磁盘上的索引中?
  2. 例如,当我查询所有firstName为"Mary"的行时,是否可以使用该索引响应查询,而非执行全表扫描?

问题解答

  • NULL行的索引存储情况:
    会被记录到磁盘索引里。包含lastName IS NULL的行,其firstName的值和lastName的NULL标记都会完整存入这个唯一复合索引中,数据库不会因为列值为NULL就跳过索引存储步骤。

  • 查询时的索引可用性:
    完全可以用该索引来响应WHERE firstName = 'Mary'的查询,不需要执行全表扫描。因为这个复合索引以firstName作为前缀列,针对前缀列的匹配查询,数据库能直接通过索引快速定位到所有符合firstName = 'Mary'的行(不管lastName是否为NULL),查询效率远高于全表扫描。

内容的提问来源于stack exchange,提问作者William Entriken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:15:41