非群集索引不能正常工作的SQL Server

时间:2010-12-07 06:25:49

标签: sql-server indexing non-clustered-index

我有一张没有任何主键的表。数据已经存在。我做了一个非聚集索引。但是当我运行查询时,实际执行计划没有显示索引扫描。我认为非聚集索引不起作用。可能是什么原因。请帮助我

2 个答案:

答案 0 :(得分:5)

首先 - 为什么没有主键? 如果它没有主键,那么它不是表 - 只需添加一个!这将有助于这么多层面......

其次:即使您有索引,SQL Server查询优化器也会始终查看您的查询以确定使用索引是否合理(或不使用)。如果选择所有列和大部分行,那么使用索引是没有意义的。

所以要避免的事情是:

  • SELECT * FROM dbo.YourTable几乎可以保证使用任何索引
  • 如果您的查询中没有良好的WHERE条款
  • 如果您的索引位于不真正选择一小部分数据的列上;布尔列上的索引或具有最多三个不同值的Gender列根本没有帮助

在不了解您的表结构,这些表中包含的数据,行数以及您正在执行的查询类型的情况下,没有人可以真正回答您的问题 - 它太宽泛了...... ..

更新:如果要在与主键不同的表上创建聚簇索引,请执行以下步骤:

1)首先,设计你的桌子 2)然后打开索引设计器 - 在您选择的列上创建一个新的聚簇索引。请注意 - 这不是主键

alt text

3)之后,您可以将主键放在ID列上 - 它会创建一个索引,但该索引未归类

alt text

答案 1 :(得分:1)

在没有任何更多信息的情况下,我猜测的原因是该表太小而不适合索引寻求值得。

如果你的表少于几千行,那么SQL Server几乎总是选择执行表/索引扫描而不管该表上的索引只是因为索引扫描实际上更快

索引扫描本身并不一定表示性能问题 - 查询实际上是否很慢?