한 테이블에서 다른 테이블에없는 값을 찾는 쿼리를 수행하고 있습니다. 예를 들어 :MySQL 쿼리 최적화
SELECT id FROM table1 WHERE id NOT IN (SELECT id FROM table2);
두 테이블은 약 1 백만 행하지만이 결과 집합에 반환되는 값과 일치하지 않는 단지 몇 백. 쿼리는 약 35 초가 걸립니다. 쿼리에서 쇼 프로필을 수행하면 mysql이 "준비 중"상태로 대부분의 시간을 보내고 있음을 알 수 있습니다. 이 상태를 어떻게 최적화 할 수 있는지 또는 "준비 중"실제로 일어나고있는 것에 대한 아이디어는 있습니까?
두 테이블의 id 값은 색인화되었으며 동일한 유형 및 크기입니다.
질의의 전체 프로파일은 다음
+--------------------------------+----------+
| Status | Duration |
+--------------------------------+----------+
| (initialization) | 0 |
| checking query cache for query | 0 |
| Opening tables | 0.13 |
| System lock | 0 |
| Table lock | 0 |
| init | 0.01 |
| optimizing | 0 |
| statistics | 0 |
| preparing | 0 |
| executing | 0 |
| Sending data | 0 |
| optimizing | 0 |
| statistics | 0 |
| preparing | 34.83 |
| end | 0 |
| query end | 0 |
| freeing items | 0 |
| closing tables | 0 |
| logging slow query | 0 |
+--------------------------------+----------+
모든 팁이 이해된다.
감사합니다.
바로 왼쪽에 조인 chnaged 기쁘다! –
b.id가 null이어야하며 어디에 사용해야합니까? –
where 절에서이를 지정하는 것이 바람직합니다. 옵티마이 저는 동일한 계획을 세워야합니다. –