내가 두 테이블 table1
및 table2
그 정의가 있습니다 :보다 효율적인 쿼리
CREATE `table1` (
'table1_id' int(11) NOT NULL AUTO_INCREMENT,
'table1_name' VARCHAR(256),
PRIMARY KEY ('table1_id')
)
CREATE `table2` (
'table2_id' int(11) NOT NULL AUTO_INCREMENT,
'table1_id' int(11) NOT NULL,
'table1_name' VARCHAR(256),
PRIMARY KEY ('table2_id'),
FOREIGN KEY ('table1_id') REFERENCES 'table1' ('table1_id')
)
내가 table2
에서 참조되지 table1
의 행 수를 알고 싶어, 그 수 다음과 같이 처리하십시오 :
SELECT COUNT(t1.table1_id) FROM table1 t1
WHERE t1.table1_id NOT IN (SELECT t2.table1_id FROM table2 t2)
이 쿼리를 수행하는 효율적인 방법이 있습니까? 발견 한 후 실행 계획이기 때문에
당신이 제공 한 링크를 통해 읽은 후에, ** 내 IN Ex ** 리조트는 구체화 또는 Exists, 내 경우 Exists .... 그래서 제외 JOIN 또는 NOT EXISTS 전략을 사용해야합니까? –
materialization이 임시 테이블을 만들기 때문에 제외 조인을 계속 사용합니다. EXPLAIN을 사용하여 최적화 계획을 검토하여 두 가지 쿼리 양식을 모두 직접 테스트 할 수 있어야합니다. –