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

一个sql语句优化问题
有三个表 A1、A2、A3
A1表:
CHELXH HAOPHM ....
1 苏A12001
2 苏A23883
A2和A3表结构一样,A2表:
GUIFEIXH CHELXH PIAOJHM .....
1 1 G91348
2 1 G64182
3 2 G31294
4 34 G28411
.........................

A3现在是空表,要求把A2表中CHELXH字段数据在A1表中存在的数据存到A3中,用
Insert Into A3 SELECT *  
FROM A2 where CHELXH in (select CHELXH from A1) 应该可以。但是现在A1、A2表中数据量很大,执行这条语句花费时间太长,请问怎么优化比较好呢?


------解决方案--------------------
改写为
Insert Into A3 SELECT A2.* from A2,A1 where A2.CHELXH=A1.CHELXH;
试试。最好先对三个表做分析,然后查看上面SQL的执行计划。

------解决方案--------------------
A1和A2,CHELXH列上有index吗?
A3表有约束吗?先disable,insert完成后再放开.