【发布时间】:2012-01-11 10:05:38
【问题描述】:
我有一个包含大约 19 列的表,其中包含合理的大量数据,并且主要用于查询以使用基于不同 where 子句的 select 语句检索数据。由于该表主要用于查询数据,因此我考虑根据查询中使用的不同 where 子句创建非聚集索引。此外,所有 get 查询都将表中的所有列作为选择列表的一部分返回。根据以上信息,我有两个选择索引的问题:
-
让我们假设我们有以下查询的 SP:
where [col_a] = {value} and [col_b] = {value} [col_b] = {value} and [col_a] = {value} [col_a] = {value} and [col_c] = {value} and [col_d] = {value} [col_a] = {value} and [col_c] = {value}我在表上创建了以下非聚集索引
[col_a] 和 [col_b] --> 第一个 SP 是否仍然使用这个索引作为 订单颠倒了
[col_a] and [col_c] and [col_d] --> 最后一个SP会使用这个索引吗 因为前两列与顺序匹配
另外,我们是否应该继续尝试根据表上的 get SP 的过滤器/连接子句定义非聚集索引?
由于所有 SP 中的选择列表返回整个列列表,我将表的所有列添加为非聚集索引(覆盖索引)中的包含列以避免书签查找。这种方法正确吗?由于我们将所有表列存储为索引定义的一部分,在这种情况下会产生什么空间影响?
【问题讨论】: