Nic*_*aro 3 sql-server clustered-index execution-plan sql-server-2008-r2
使用:SQL Server 2008 R2
我目前正在逐步执行查询执行计划,并且遇到了表上聚集索引更新的实例。这里的问题是正在更新的列不是聚集索引的一部分。
桌子:
<table>
id INT IDENTITY(1,1) -- Clustered Index
, name VARCHAR(20) -- Nonclustered Index
, status CHAR(1)
, quantity INT
, price FLOAT
Run Code Online (Sandbox Code Playgroud)
更新声明:
UPDATE a
SET a.status = @status
, a.quantity = @quantity
, a.price = @price
FROM <table> a
WHERE a.name = @name
Run Code Online (Sandbox Code Playgroud)
执行计划显示 Eager Spool 成本为 36%,聚集索引更新成本为 55%,名称索引上的索引查找成本为 9%,计算标量和顶级项目成本为 0%。
为什么计划显示聚集索引更新?我能做些什么来防止这种情况,并防止急切的线轴?
当表上有聚集索引时,聚集索引就是表!
在这种情况下,您可以在精神上将“表”替换为“聚集索引”,这很有意义。
每行中每个字段的数据都在聚集索引中。聚集索引只是将数据库中物理页面的顺序设置为由聚集键组织。
对于这些事情,您也可以始终使用电话簿类比:在您的经典电话簿中,数据聚集在 上Last Name, First Name。每个条目仍然PhoneNum, Address处于叶级别,但您不会按此排序。页面按键按物理顺序排列。
除非您向我们展示您正在运行的表和查询,否则我无法建议优化查询,但基本上这笔费用将以一种或另一种方式支付。如果不更新聚集索引,它将是表更新和表扫描。
| 归档时间: |
|
| 查看次数: |
3175 次 |
| 最近记录: |