sql-server – 为什么UPDATE比SELECT要花费更长的时间?
发布时间:2020-12-12 16:23:20 所属栏目:MsSql教程 来源:网络整理
导读:我有以下select语句几乎立即完成. declare @weekending varchar(6) set @weekending = 100103select InvoicesCharges.orderaccnumber,Accountnumbersorders.accountnumber from Accountnumbersorders,storeinformation,routeselecttable,InvoicesCharges,invo
我有以下select语句几乎立即完成.
declare @weekending varchar(6) set @weekending = 100103 select InvoicesCharges.orderaccnumber,Accountnumbersorders.accountnumber from Accountnumbersorders,storeinformation,routeselecttable,InvoicesCharges,invoice where InvoicesCharges.pubid = Accountnumbersorders.publication and Accountnumbersorders.actype = 0 and Accountnumbersorders.valuezone = 'none' and storeinformation.storeroutename = routeselecttable.istoreroutenumber and storeinformation.storenumber = invoice.store_number and InvoicesCharges.invoice_number = invoice.invoice_number and convert(varchar(6),Invoice.bill_to,12) = @weekending 但是,等效的更新语句需要1分40秒 declare @weekending varchar(6) set @weekending = 100103 update InvoicesCharges set InvoicesCharges.orderaccnumber = Accountnumbersorders.accountnumber from Accountnumbersorders,invoice where InvoicesCharges.pubid = Accountnumbersorders.publication and Accountnumbersorders.actype = 0 and dbo.Accountnumbersorders.valuezone = 'none' and storeinformation.storeroutename = routeselecttable.istoreroutenumber and storeinformation.storenumber = invoice.store_number and InvoicesCharges.invoice_number = invoice.invoice_number and convert(varchar(6),12) = @weekending 即使我添加: and InvoicesCharges.orderaccnumber <> Accountnumbersorders.accountnumber 在更新语句结束时将写入次数减少到零,需要相同的时间. 我在这里做错了吗?为什么会有这么大的差异? 解决方法>事务日志文件写入>索引更新 >外键查找 >外键级联 >索引视图 >计算列 >检查约束 >锁 >闩锁 >锁定升级 >快照隔离 > DB镜像 >文件增长 >其他流程读/写 >页面拆分/不合适的聚集索引 >转发指针/行溢出事件 >指数差 >统计数据已过期 >糟糕的磁盘布局(例如一个大的RAID) >使用具有表访问权限的UDF检查约束 > …… 虽然,通常的嫌疑人是触发器…… 此外,您的条件额外没有意义:SQL Server如何知道忽略它?大部分行李仍然会产生更新……即使触发器仍然会触发.例如,在搜索行以查找其他条件时,必须保持锁定 2011年9月和2012年2月编辑,提供更多选项 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |