gpt4 book ai didi

sql-server - 主键删除需要多长时间?

转载 作者:行者123 更新时间:2023-12-03 02:46:37 25 4
gpt4 key购买 nike

画一个简单的表结构:

Table1        Table2
---------- ----------
ID<-------| ID
Name |-->Table1ID
Name

Table1 有几百万行(例如 350 万行)。我通过主键发出删除:

DELETE FROM Table1 WHERE ID = 100;

Table2 中没有任何行引用 ID = 100Table1,因此删除操作不会违反任何外键约束。

您预计删除需要多长时间?大约几毫秒?几百毫秒?一秒或更长时间?几秒钟?等等,假设机器没有陷入困境并且可以轻松处理请求。

现在,我遇到这样的情况,像这样的删除大约需要 700 毫秒。对我来说,这似乎太慢了。我很好奇我是否偏离了基地,或者其他人是否认为这太慢了,以及有助于加快速度的建议!

这是实际的执行计划:

Execution Plan

(此处的 XML 执行计划: http://pastebin.com/q9hSMLi3 )

聚集索引删除(81%)命中聚集PK、非聚集唯一索引、非聚集非唯一索引。

最佳答案

问题是用于验证外键的聚集索引扫描。

当删除成功并且没有导致违规的匹配记录时,则需要扫描所有table2。该表有 1,117,190 行,因此这是一项昂贵的操作,绝对可以从索引中受益。

执行计划中显示的 10% 数字只是基于某些建模假设的估计。

整个计划的成本为 0.0369164,其中表 2 上的扫描成本为 0.0036199,其他所有项目的成本为 0.0332965。但请注意,对于聚集索引扫描运算符,估计 CPU 成本为 1.22907,估计 IO 成本为 10.7142(总计 11.94327 而不是 0.0369164 )。

造成这种差异的原因是扫描是在反半连接运算符下进行的,一旦找到匹配的行,扫描就会停止。估计的子树成本在建模假设下按比例缩小,即这将在仅扫描表的一小部分之后发生。

如果没有 FK 违规并且删除成功,则需要扫描整个表,因此使用未按比例缩小的数字会提供更多信息。

如果使用该运算符的 11.94327 成本重新计算出百分比,该运算符代表实际发生的完整扫描,则该扫描运算符显示为计划成本的 99.7% ( 11.94327/(11.94327 + 0.0332965))。

关于sql-server - 主键删除需要多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com