나는에게 MySQL의 (의 MyISAM)에서이 질의를했습니다 차단 (또는이를 최적화하는 방법) :MySQL은
SELECT * FROM `links` WHERE `id` IN (SELECT `link` FROM `posts` WHERE `read_time`<'2010-10-16')
그것은 나에게 좋아 보이지만, MySQL은 그것으로 끊습니다. 'links'는 16000 개의 행이있는 테이블이고 'posts'는 arround가 5000 개입니다. 'ID'와 '링크'나는 몇 가지 테스트를했습니다
차있는 각 테이블에 몇 가지를 제외하고
- 제거 모든 기록. 그것은
- 이너 쿼리를 실행 작업 (
posts
FROMlink
을 선택 WHEREread_time
< '2010-10-16') 제 1 및 실행 외부 쿼리 (*links
FROMid
IN ('1232', '1354', '3324 SELECT ')). 그것은 내 우분투 업그레이드 - 시도를 작동하지만 이것이 무슨 일이야 (5.1.37-1ubuntu5.5)
마지막 MySQL 버전이 있다고? 내가 벌레를 찾았 니? 아니면 내가 잘못하고있는거야?
아니요, 이것은 버그가 아닙니다. 마크 바이어스 (Mark Byers)가 언급했듯이, 'JOIN'은 더 조용하게 작동 할 것이다. 'IN'은 내가 옳은 것을 기억한다면 모든 것을 비교할 것이고 16k * 5k 비교로 끝날 것입니다. – Bobby
게시 계획을 설명하면 답변이 자명 할 것입니다. 조인 + 색인 –