2

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

4

2 回答 2

5

首先 -为什么没有主键? 如果它没有主键,它就不是一个表——只需添加一个!这将在很多层面上有所帮助......

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

所以要避免的事情是:

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

如果不了解更多关于您的表结构、这些表中包含的数据、行数以及您正在执行的查询类型,没有人能真正回答您的问题 - 它太宽泛了......

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

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

替代文字

3)之后,您可以将主键放在ID列上 - 它会创建一个索引,但该索引不是聚集的!

替代文字

于 2010-12-07T06:35:09.613 回答
1

在没有更多信息的情况下,我猜原因是表太小,索引搜索不值得。

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

索引扫描本身并不一定表明存在性能问题——查询真的很慢吗?

于 2010-12-07T06:43:44.287 回答