MySQL(InnoDB)是否在复合索引中索引空值?

问题描述 投票:0回答:1

假设我有一个包含 100 万行和很多列的表。 X 和 Y 是两个 varchar 列。对于 0.1% 的行,X 和 Y 都有一个值。对于其他 99.9% 的行,X 和 Y 均为空。假设我在 (X,Y) 上创建一个复合 BTree 索引。

MySQL 会索引所有这些空值吗?

当我单独查询X或者X和Y一起查询时,我会得到很好的性能。但是,每次插入或更新 X 和 Y 都为空的新记录时,我会付出一点点惩罚吗?

mysql database-indexes
1个回答
0
投票

如果您在

table(col1, col2)
上创建索引,并且执行
WHERE col1 = 'something' AND col2 = 'something'
,您将利用该索引;这将是非常有选择性的。与
WHERE col1 = 'something'
相同。

但是

WHERE col1 IS NOT NULL
你必须进行测试。
WHERE col1 IS NULL
会扫描表,因为在这种情况下索引根本没有选择性。

© www.soinside.com 2019 - 2024. All rights reserved.