【发布时间】:2014-09-24 05:48:23
【问题描述】:
场景 1:
我在 (OrderDate, Country, OrderStatus) 上有一个非聚集索引
我想如果我按OrderDate、OrderDate/Country 或OrderDate/Country/Status 搜索,那么可以使用该索引。如果我只是通过OrderDate/OrderStatus 或OrderStatus 搜索呢?
场景 2:
我在 OrderDate、Country 和 OrderStatus 上有 3 个单独的非聚集索引
如果我的查询涉及所有 3 个列,那么它可以利用所有 3 个索引吗?我的意思是,在使用它选择的最佳索引进行过滤之后,它可以利用其他 2 个索引吗?
这些信息将帮助我不要过度实施索引。
谢谢
预计到达时间:补充一下,这是一个典型的订单搜索页面,包含大约 30 个不同的过滤器。
【问题讨论】:
-
对于场景 1:搜索 ON
OrderDate/OrderStatus可能使用索引 - 用于OrderDate。但仅在OrderStatus上的搜索不能使用索引。如果正在搜索该索引中的 n 最左列(其中 n >= 1),则可能使用复合索引 -
谢谢,这符合我对场景 1 的看法
-
@marc_s:实际上只有
OrderStatus可以使用索引。如果您需要比索引中更多的信息,它会扫描它并使用查找。
标签: sql sql-server tsql indexing