【发布时间】:2015-11-08 02:16:36
【问题描述】:
我有两张桌子:
1) Testone - 有 100k 行和 1 个索引和 6 个非聚集索引
2) Testtwo - 有 3.16 亿行,1 个索引和 4 个非聚集索引
由于执行此查询需要更多时间,我有更新语句需要优化以下语句,请您帮助我最好的方法..
update mp
set mp.ModelInfoID = mi.ModelInfoID
from Testone mp
inner join Testtwo mi on mp.ModelNumberStr = replace(replace(mi.Model, '/', ''), '-', '')
where MemberID is not null and mp.ModelInfoID is null
【问题讨论】:
-
使用替换(或任何其他)功能的连接将执行得非常糟糕!您需要在一个通用的索引列上连接您的表。如果没有,那么您的查询将永远不会在数百万行中表现良好。
-
也许添加 computed column 到 testtwo 而不是内联 replace(replace。计算的列然后可以用于产生 SARgable 结果的索引
标签: sql sql-server sql-server-2008 sql-update