【发布时间】:2015-12-07 15:04:45
【问题描述】:
我在三列的组合上创建了非聚集索引。是否需要在 where 条件中指定所有三列才能使用非聚集索引。
【问题讨论】:
-
我不这么认为。但为了使用该索引,第一列必须在
WHERE子句中。
标签: sql-server indexing sqlperformance non-clustered-index
我在三列的组合上创建了非聚集索引。是否需要在 where 条件中指定所有三列才能使用非聚集索引。
【问题讨论】:
WHERE 子句中。
标签: sql-server indexing sqlperformance non-clustered-index
简短的回答是否定的。
如果至少索引中的第一列出现在您的where 子句中,则可以使用索引。
它是否将被使用已经取决于优化器,但假设您在where 子句中的其他列上没有任何其他索引,它可能会被使用。
【讨论】:
为了利用您的索引,您必须像这样使用。
索引:Ix_threecols(c1,c2,c3)
1. select c1,c2,c3 from table where c1=val
and c2=val and c3=val
2. select c1,c2,c3 from table where c1=val
and c2=val
3. select c1,c2,c3 from table where c1=val
索引中最左边的第一列应该用在 where 子句中。 请不要在您的选择中使用 (*),因为它可能会导致索引扫描。
我们必须检查执行计划才能对此进行更多分析。
【讨论】: