删除语句如下: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条左右的数据在多表关联下非常慢,请教问题出在哪里?
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条左右的数据在多表关联下非常慢,请教问题出在哪里?
赞一个! 删除慢有可能是你表上存在index,因为删除数据的时候要先删除对应的index,这样就比较慢了
要不然怎么你老是会听到,索引只会提高查询效率,反而对DML操作效率低呢,这就是问题所在!
--把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
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根本没有与其他关联信息
是我写错了,顺便整理一下,应该如下: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')
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)
这个逻辑是不是有问题呢?只要存在一个,就删除T0中所有的数据阿?