Bri*_*tul 9 sql-server-2005 clustered-index
我在SQL Server 2005中有一个存储过程,当我运行它并查看它的执行计划时,我注意到它正在进行聚簇索引扫描,这使得它的成本为84%.我已经读过,我必须修改一些东西以获得Clustered Index Seek,但我不知道要修改什么.
我会感激任何帮助.
谢谢,
布赖恩
Rem*_*anu 20
没有任何细节很难猜出问题是什么,甚至是否是一个问题.扫描而不是搜索的选择可能受到许多因素的驱动:
SELECT * FROM <table>.这是一个简单的案例,可以通过一个简单的索引扫描完全覆盖,而无需考虑其他任何事情.WHERE column = @value但是列是VARCHAR(Ascii)而@value是NVARCHAR(Unicode).(foo, bar)但WHERE子句bar单独使用.这些是一些快速指针,指出在预期聚簇索引搜索时可能存在聚簇索引扫描的原因.这个问题非常通用,除了依靠8球之外,不可能回答'为什么'.现在,如果我将您的问题正确记录并正确表达,那么期望聚集索引寻找它意味着您正在根据已确定的键值搜索唯一记录.在这种情况下,问题必须与WHERE子句的SARGability有关.
如果查询在表中包含超过一定百分比的行,则优化器将选择执行扫描而不是搜索,因为它预测在这种情况下它将需要更少的磁盘IO(对于Seek,它需要一个其返回的每一行的索引中每个级别的磁盘IO,而对于扫描,整个表中每行只有一个磁盘IO.
因此,如果在b-tree索引中有5个级别,那么如果查询将生成表中超过20%的行,则读取整个表比为20%中的每个生成5个IO更便宜行...
您是否可以将查询的输出缩小一点,以减少此过程中此步骤返回的行数?这将有助于它选择扫描的搜索.
| 归档时间: |
|
| 查看次数: |
7605 次 |
| 最近记录: |