我的sql语句是:INSERT INTO TABLE (A, B, C, D) SELECT a, b, c, d FROM DUAL WHERE NOT EXISTS (SELECT * FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d);
作用是如果表中不存在重复的数据则插入数据。我表中已经有了4000万的数据量,并且建立了在A列建立了索引,在B列也建立了索引。我在执行该语句时速度特别慢,请问有什么可以改进的措施和方法。(其中,A,B,C,D为表中的字段,a,b,c,d为要插入的数值)。

解决方案 »

  1.   

    1你可以在ABCD四个建唯一索引,这样插入重复时会报错的
    2用MERGE INTO
      

  2.   

    在TABLE上建A,B,C,D的联合索引。
      

  3.   

    关键是:SELECT * FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d;我估计慢在这个地方.
      

  4.   

    1、SELECT * FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d; 
    改成
    SELECT A,B,C,D FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d; 
    2、A/B/C/D四个查询条件,哪个过滤数据的条数越多,放在越后面。
      

  5.   

    INSERT INTO TABLE (A, B, C, D) SELECT a, b, c, d FROM DUAL WHERE NOT EXISTS (SELECT * FROM TABLE WHERE TABLE.A = a AND TABLE.B = b AND TABLE.C = c AND TABLE.D = d); 
    创建一个联合主键(A,B,C,D),再写一个存储过程执行此动作吧,运用LOOP循环就可以了!