加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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月编辑,提供更多选项

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读