0

我有两个针对特定表运行的常见查询。一个查询在 where 子句中使用列 A 和 B,另一个查询使用列 B 和 C。

放在表上以加快查询速度的最佳索引是什么?我是否在所有三列 A、B 和 C 上创建一个索引?还是我创建两个索引,一个在 A & B 上,另一个在 B & C 上?还是我创建三个索引,一个在 A 上,第二个在 B 上,第三个在 C 上?

我不确定 SQL Server 究竟如何使用索引。单个查询是否可以使用两个单独的索引(例如,一个在 A 列上,另一个在 B 列上)?如果查询 where 子句仅引用其中的两列(例如 A 和 B),SQL Server 会使用涵盖三列(例如 A、B 和 C)的索引吗?

4

1 回答 1

2

在这种情况下,“什么是最好的”的答案是“取决于”,因为它取决于数据的基数、数据量和数据类型等因素,但很容易回答“什么是最差的?”。

不要创建使用 A、B 和 C 的索引。原因是当您创建包含两列的索引时,它按第一列排序,然后是第二列。这意味着,如果您要在 A、B 和 C 上创建一个列,然后只在 B 和 C 上进行查询,则它根本不会执行良好。同样,如果您要在 B 和 C 上创建索引,则对于仅查询列 C 的查询几乎没有用处。如果您的所有查询都属于上述两个类别之一,您很可能会得到创建索引 AB 和索引 BC 的最佳性能。否则,您可能应该为每个列创建三个索引。

于 2013-09-09T22:49:15.483 回答