我在SQL Server 2005中有一个存储过程,当我运行它并查看它的执行计划时,我注意到它正在执行聚集索引扫描,这使它花费了84%。我读到我必须修改一些东西才能在那里找到聚集索引,但是我不知道要修改什么。
我将不胜感激。
谢谢,
布赖恩
最佳答案
没有任何细节很难猜测出问题是什么,甚至根本就没有问题。选择扫描而不是搜索可能受许多因素驱动:
SELECT * FROM <table>
。这是一个微不足道的情况,可以通过簇状索引扫描完全覆盖,而无需考虑其他任何事情。 WHERE column = @value
,但列为VARCHAR
(Ascii),@ value为NVARCHAR
(Unicode)。 (foo, bar)
列上,但WHERE子句仅位于bar
上。 这些是一些快速指示,为什么在期望使用聚集索引查找时可能会出现聚集索引扫描。这个问题非常笼统,除了依靠8球之外,不可能给出“为什么”的答案。现在,如果我认为您的问题得到了正确的记录和正确的表达,那么期望聚集索引查找意味着您正在基于聚集的键值搜索唯一记录。在这种情况下,问题必须出在WHERE子句的SARGability上。
关于sql-server-2005 - 我应该怎么做才能获得聚集索引查找而不是聚集索引扫描?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359558/