source

하위 쿼리에서 WHERE를 삭제할 수 없습니다.

manycodes 2023. 1. 15. 17:18
반응형

하위 쿼리에서 WHERE를 삭제할 수 없습니다.

MariaDB 10.4.12를 사용하여 DELETE 스테이트먼트를 실행하려고 합니다.이 스테이트먼트는 서브쿼리를 기반으로 합니다.

DELETE FROM `mydb1`.`mytable1` 
WHERE `my_id` IN (
    SELECT `TABLE_ID` FROM `TABLES_CT` 
    WHERE `TABLE_NAME` = 'tableName'AND `TABLE_ACTION` IN ('D', 'U')
);

이 작업을 실행하면 30초 후에 타임아웃이 됩니다.information_schema.innodb_lockwaits 와 innodb_trx 를 보면, 같은 DELETE 스테이트먼트가 2개의 다른 스레드에서 차단되고 있습니다.

SELECT로 실행하면 1밀리초 안에 실행됩니다.

좋은 생각 있어요?

MySQL은 최적화하는 경향이 있다WHERE IN형편없이동등한 JOIN 인터페이스를 사용합니다.

DELETE t1 FROM mydb1.mytable1 AS t1
JOIN TABLES_CT AS t2 ON t1.my_id = t2.TABLE_ID
WHERE t2.TABLE_NAME = 'tableName' AND t2.TABLE_ACTION IN ('D', 'U')

언급URL : https://stackoverflow.com/questions/61922394/unable-to-delete-where-in-subquery

반응형