SQL查询优化问题,小可愚钝,脑瓜子想破了也没想到,求救~
感谢各位查看此贴的哥哥姐姐,具体情况如下:
UPDATE t_a
SET t_a.field4 = t_b.field4, t_a.field5 = t_b.field5
FROM t_a INNER JOIN t_b
ON t_a.field1 = t_b.field1 AND t_a.field2 = t_b.field2 AND t_a.field3 = t_b.field3
其中表t_b仅5个字段(设为field1~field5),而t_a除了包含这5个字段还有其它字段,field1, field2, filed3构成联合主键。
另外,目前t_a表中有40 000条数据, t_b表中有10 000条数据。显而易见上面的语句至少会产生12亿+的比较次数,个人目前执行花费时间在120s+。
望各位哥哥姐姐不吝赐予小可更优的办法,感激不尽~
------解决方案--------------------t_a,t_b的field1,field2,field3建复合索引就行了,这样速度很快
------解决方案--------------------临时表的数据是什么产生的?我看应该只需要一个临时表就够了
------解决方案--------------------把语句改成这样试试,在inner join之间加一个hash:
UPDATE t_a
SET t_a.field4 = t_b.field4, t_a.field5 = t_b.field5
FROM t_a INNER hash JOIN t_b
ON t_a.field1 = t_b.field1 AND t_a.field2 = t_b.field2 AND t_a.field3 = t_b.field3
------解决方案--------------------得想办法在逻辑上把12亿降下去
------解决方案--------------------大数据量hash join是一个很好的关联算法,但是要研究为什么优化器一开始没用这个算法
------解决方案--------------------临时表上可以建索引,在2个表关联的字段上建索引试试.