代码之家  ›  专栏  ›  技术社区  ›  Simon Elms

用于处理多个常见查询的最佳索引[已关闭]

  •  0
  • Simon Elms  · 技术社区  · 11 年前

    我有两个针对特定表运行的常见查询。一个查询在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 回复  |  直到 11 年前
        1
  •  2
  •   gfreeman    11 年前

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

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