2010-12-07 55 views
2

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

+2

您需要提供更多的细节!查询优化器可能会决定忽略索引的原因有几个(如果表非常小,如果使用的索引键不够有选择性,如果查询包含其他谓词等)。没有显示表结构(例如。创建表脚本),索引创建脚本,查询和查询计划,也没有关于数据的一些统计信息,这将很难帮助您超出一般考虑范围。 – mjv 2010-12-07 06:41:02

回答

5

首先 - 为什么没有主键?如果它没有主键,它不是表 - 只需添加一个!第二:即使你有一个索引,SQL Server查询优化器也会一直关注你的查询,以决定是否有意义使用索引(或不)。如果您选择所有列和大部分行,那么使用索引是毫无意义的。

所以需要避免的事情是:

  • SELECT * FROM dbo.YourTable几乎可以保证使用任何指标
  • ,如果你没有在您的查询的好WHERE条款
  • 如果你的指数是在一个并不真正选择一小部分数据的列上;一个布尔列的索引,或者最多三个不同值的Gender列完全不

帮助不知道了很多关于你的表结构,包含在这些表中的数据,行数和什么样的你执行查询的,没有人能真正回答你的问题 - 它只是太宽泛....

更新:,如果你想创建一个表,该表一个聚集索引从您的主键不同,请执行以下步骤:

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

alt text

3)在此之后,你可以把你的主键上ID列 - 它会创建一个索引,但索引为不聚集

alt text

+2

+1。击败我!我会给它+5为“为什么没有主键?”如果我能 – 2010-12-07 06:38:32

+0

谢谢marc_s – 2010-12-07 06:49:33

1

没有有任何我猜想,原因是该表是太小索引查找是值得的更多信息。

如果您的表的行数少于几千行,那么SQL Server几乎总是会选择执行表/索引扫描,无论该表上的索引为,只是因为索引扫描实际上更快。

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