处理多个常见查询的最佳索引

时间:2013-09-09 22:33:05

标签: sql sql-server sql-server-2008

我有两个针对特定表运行的常见查询。一个查询使用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)的索引?

1 个答案:

答案 0 :(得分:2)

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

不要创建使用A,B和C的索引。原因是当您创建包含两列的索引时,它将按第一列排序,然后排序第二列。这意味着如果您要在A,B和C上创建一个列,但是然后仅在B和C上查询,则它将无法正常运行。类似地,如果您要在B和C上创建索引,那么对于仅查询C列的查询来说,它将是无用的。如果您的所有查询都属于上述两个类别之一,那么您很可能会得到创建索引AB和索引BC的最佳性能。否则,您应该为每个列创建三个索引。