UNIQUE INDEX是否会索引NULL值?相关查询能否利用该索引?
关于唯一复合索引中NULL值的索引存储与查询使用问题
示例表结构
id INT PRIMARY KEYfirstName VARCHAR(20) NOT NULLlastName VARCHAR(20) NULLINDEX UNIQUE (firstName, lastName)
用户疑问
我理解当行中lastName IS NULL时,无论firstName取值如何,都不会触发唯一约束检查(因为NULL彼此不被视为相等)。但我想确认两个问题:
- 这些含NULL的行的相关值是否会被实际记录到磁盘上的索引中?
- 例如,当我查询所有firstName为"Mary"的行时,是否可以使用该索引响应查询,而非执行全表扫描?
问题解答
NULL行的索引存储情况:
会被记录到磁盘索引里。包含lastName IS NULL的行,其firstName的值和lastName的NULL标记都会完整存入这个唯一复合索引中,数据库不会因为列值为NULL就跳过索引存储步骤。查询时的索引可用性:
完全可以用该索引来响应WHERE firstName = 'Mary'的查询,不需要执行全表扫描。因为这个复合索引以firstName作为前缀列,针对前缀列的匹配查询,数据库能直接通过索引快速定位到所有符合firstName = 'Mary'的行(不管lastName是否为NULL),查询效率远高于全表扫描。
内容的提问来源于stack exchange,提问作者William Entriken
相关产品推荐
相关产品推荐

