删除语句如下:DELETE FROM A 
WHERE A.ID IN (SELECT A.ID 
  FROM (SELECT ID, F1 FROM B) D, A, C 
  WHERE D.ID = C.F1 AND C.F2 = E0725.ID AND D.F1 = C.F3 AND '123' = C.F4)语法没有问题,可以执行,但是耗费的时间非常长,以至于每次都是没执行完我就把程序退出了。但是条件不变
的查询语句执行的速度非常快,语句如下:SELECT * FROM A 
WHERE A.ID IN (SELECT A.ID 
  FROM (SELECT ID, F1 FROM B) D, A, C 
  WHERE D.ID = C.F1 AND C.F2 = E0725.ID AND D.F1 = C.F3 AND '123' = C.F4)查询出来的数据大概是10条左右,也就是说要删除这10条左右的数据在多表关联下非常慢,请教问题出在哪里?

解决方案 »

  1.   


    赞一个! 删除慢有可能是你表上存在index,因为删除数据的时候要先删除对应的index,这样就比较慢了
      要不然怎么你老是会听到,索引只会提高查询效率,反而对DML操作效率低呢,这就是问题所在! 
      

  2.   

    所有的数据表都没有index,所有的数据表的数据都没有查过5000条记录
      

  3.   

    哪个表上有索引 先停掉索引
    --把C.F4 ='123'的条件的数据量多不
    SELECT A.ID  
    FROM (SELECT ID, F1 FROM B) D, A, C  
    WHERE C.F4 ='123' and D.ID = C.F1 AND C.F2 = E0725.ID AND D.F1 = C.F3 
      

  4.   

    DELETE FROM A  
    WHERE A.ID IN (SELECT A.ID  
    FROM (SELECT ID, F1 FROM B) D, A, C  
    WHERE D.ID = C.F1 AND C.F2 = E0725.ID AND D.F1 = C.F3 AND '123' = C.F4)看楼主的语句很乱
    而且表A根本没有与其他关联信息
      

  5.   

    To 6楼:
    是我写错了,顺便整理一下,应该如下:DELETE FROM A  
    WHERE A.ID IN (SELECT A.ID  
    FROM (SELECT ID, F1 FROM B) D, A, C  
    WHERE C.F1 = D.ID AND 
                  C.F2 = A.ID AND  
                  C.F3 = D.F1 AND 
                  C.F4 = '123')
      

  6.   

    试试改成这样会不会好点?(索引一样)
    DELETE FROM T0
    WHERE EXISTS (
      SELECT 1 FROM A,B,C
      WHERE C.F1=B.ID
        AND C.F3=B.F1
        AND C.F2=A.ID
        AND C.F4='123'
        AND T0.ID=A.ID)
      

  7.   

    To 8楼
    这个逻辑是不是有问题呢?只要存在一个,就删除T0中所有的数据阿?