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