假设有一个包含 A 列和 B 列的表。每列都有自己的索引。
因此,如果选择条件是 A 和 B,那么 SQL Server 将使用最优索引,但不会使用第二个,或者仍然会同时使用两个,例如,通过一个索引选择第一个,然后使用评选结果的第二个指标?
我倾向于只选择一个索引,但我无法谷歌确认......
假设有一个包含 A 列和 B 列的表。每列都有自己的索引。
因此,如果选择条件是 A 和 B,那么 SQL Server 将使用最优索引,但不会使用第二个,或者仍然会同时使用两个,例如,通过一个索引选择第一个,然后使用评选结果的第二个指标?
我倾向于只选择一个索引,但我无法谷歌确认......
优化器可以使用两个索引,它只能使用其中一个,也可以不使用任何索引。一般来说,它取决于查询、表和索引定义、表中的数据、统计状态、SqlServer 版本、会话设置等因素。
这是一个优化器在同一个表上使用两个索引的示例。
桌子
数据
指数
使用AND条件查询列
A
和B
查询计划
那些。实际上,优化器将查询转换为连接
现在在列上使用OR
A
条件和B
这相当于从联合中不重复采样
对列和使用AND条件进行查询,但索引不涵盖查询
A
B
有点类似于第一种情况,但添加了一个Key Lookup连接来获取列数据
Filler
。相同的查询,但使用OR
并且优化器决定扫描聚集索引更有利可图
同一张表,同样的索引,不同的数据,第一次查询(
SELECT Id ... WHERE ... AND ...
)优化器仅使用一个索引(在 column 上
B
),从聚集索引中提取其余索引。