日期:2014-05-17  浏览次数:20917 次

Update 语句优化问题
update  st_zd1 a  set sz_jf= (select sz_jf from t_zd b  where  a.djh=b.bsm)

其中djh与bsm都已经添加了索引,st_zd1表中有30万记录,t_zd中有50万记录,更新速度很慢。

查看执行计划都是table access full,请问这怎么优化


upadate?语句优化

------解决方案--------------------
你更新这个不带where条件??????
考虑下用merge吧
------解决方案--------------------
update  st_zd1 a  set sz_jf= (select sz_jf from t_zd b  where  a.djh=b.bsm)
where exists(select sz_jf from t_zd b  where  a.djh=b.bsm)
这样会快点
------解决方案--------------------
引用:
update  st_zd1 a  set sz_jf= (select sz_jf from t_zd b  where  a.djh=b.bsm)
where exists(select sz_jf from t_zd b  where  a.djh=b.bsm)
这样会快点

+1。
楼主那个没有指明筛选 所以会两个全表扫描更新。
------解决方案--------------------
update(select a.name,b.name from a,b where a.id=b.id) set a.name=b.name;


这样更快,两个索引都能用到,3楼的只能用到一个索引