느린 SQL 쿼리를 읽은 후 최적화 방법을 모르면 쿼리의 일반적인 성능에 대해 생각하게되었습니다. 확실히 쿼리를 조금 더 빨리 만들려면 첫 번째 테이블의 결과 (다른 테이블이 조인 된 경우)가 조인하기 전에 (이 질문의 내부 조인) 가능한 한 작아야합니다.
예를 들면 다음과 같습니다.
SELECT *
FROM ( SELECT * FROM table1 WHERE col = @val ) t
INNER JOIN table2 ON col = col2
다음보다 낫거나 빠릅니다.
SELECT *
FROM table1
INNER JOIN table2 ON col = col2
WHERE table1.col = @val
내 이론은 다음과 같습니다 (올바른 구현이 아닐 수도 있습니다 (MSFT Press)는 SQL Server 2008 내부 서적을 기억하려고합니다).
- 쿼리 프로세서는 먼저 왼쪽 테이블 (table1)을 가져옵니다.
- 필요한 행을 필터링하기 전에 두 번째 테이블 (table2)을 결합하고 직교 곱을 형성합니다 (해당되는 경우).
- 그런 다음 SEELCT 문을 마지막으로 사용하여 WHERE, ORDER BY, GROUP BY, HAVING 절을 수행하십시오.
따라서 위의 명령문 # 1에서 테이블이 더 작 으면 SQL 엔진은 직교 곱을 작성할 때 수행 할 작업이 줄어 듭니다. 그런 다음 where 문에 도달하면 메모리에서 필터링 할 결과 집합이 줄어 듭니다.
나는 그것이 비현실적이라고 마크에서 너무 멀 수 있습니다. 내가 말했듯이, 그것은 이론입니다.
당신의 생각?
참고 : 나는 단지이 질문에 대해서만 생각했으며 아직 내 테스트를 실행할 기회가 없었습니다.
참고 2 : MySql 등의 구현에 대해 아무것도 모르기 때문에 SQL Server로 태그 지정되었습니다 .