2011-07-27 7 views
1

mssql server 2008을 사용합니다. 성능을 비교해야합니다. 다음 주까지는 쿼리 분석기에 액세스 할 수 없습니다. 그것은 단지 미친 생각이고, 어떤 스크립트가 가장 잘 작동하는지 알고 싶습니다.이 예제는 인덱스를 사용하는 것이 가장 좋습니다

어떤 스크립트가 txt에서 색인을 사용할 수 있는지, 왜 그런지 궁금합니다. (2 * 조인)

SELECT * 
FROM table1 t1 LEFT JOIN 
table2 t2 ON t1.id = t2.t1_id 
AND NOT t2.txt LIKE 'blue%' 
AND NOT t2.txt LIKE 'green%' 
INNER JOIN table2 t3 ON t1.id = t3.t1_id 
WHERE t2.id is NULL  

SQL2 : (1 * 1 가입 *

2- 테이블

3 개 인덱스와 두 테이블의 합계가 대략 1 밀 SQL1가
table1(id int(clustered index), name varchar(10))   
table2(t1_id int(non-clustered index), txt varchar(10)(non-clustered index)) 

를 있음 '또는')

SELECT * 
FROM table1 t1 LEFT JOIN 
table2 t2 ON t1.id = t2.t1_id 
AND (t2.txt LIKE 'blue%' or t2.txt LIKE 'green%') 
+0

AFAI는 스택 Exchange 데이터 탐색기에 "실행 계획보기"옵션이 있음을 기억합니다. 부정은 없기 때문에 SQL2는 나에게 한 눈에 훨씬 더 sargable 해 보인다. –

+0

BTW는 올바른 DDL을 제공하십시오 (t1_id에 대한 정보를 놓치 셨고 정확히 어떤 색인을 가지고 있는지 설명하지 못했습니다 - t2에 두 개의 개별 색인이 있거나 단 하나의 복합 색인이 있습니까? clustered?) –

+0

@ MartinsSmith가 t1_id를 수정했습니다. 총 3 개의 인덱스가 있는데, 어느 인덱스가 클러스터되어 있는지를 추가했습니다. 유일한 재미있는 색인은 txt에 색인 –

답변

1

첫 번째 SQL 쿼리에서 두 개의 조인을 사용하지 말고 우리는 NOT EXISTS를 사용해야합니다. 임시 DB에서 발생한 열의 수에 영향을주지 않기 때문입니다.

SELECT * 
FROM table1 t1 
    INNER JOIN table2 t3 ON t1.id = t3.t1_id 
WHERE NOT EXISTS (
    SELECT TOP 1 1 
    FROM table2 t2 
    WHERE t1.id = t2.t1_id 
    AND NOT t2.txt LIKE 'blue%' 
    AND NOT t2.txt LIKE 'green%') 

그러나 그것은 당신이 ("NOT EXISTS", "싫어")는 가독성을 어렵게하기 때문에 이중 부정을 방지해야한다, 훨씬 더 읽기 그리고 동일한 작업을 수행합니다.

두 번째 쿼리의 성능이 사용 가능하거나 거의 동일하면이를 사용하는 것이 좋습니다.

전체 텍스트 색인을 대신 생각해 보셨습니까?

0

나는 당신이 실제로 사과와 사과를 비교하고 있다고 생각하지 않는다. 하나의 질의와 다른 것과 같은 것을 사용하면 다른 행동에 중요한 차이가 생길 것입니다. 옵티마이 저는 SQL1의 txt 열에 대한 색인을 사용하지 않을 것입니다. 일반적으로 매우 다른 (또는 비 선택적) 쿼리를 제공합니다. 즉, 파란색 또는 녹색으로 시작하는 값을 제외하고 txt 열의 모든 항목을 찾기 위해 최적화 프로그램에 요청하는 것입니다. 이렇게하면 해당 열에서 대부분의 값을 묻는 것입니다.

또한 table2에 가입하면 아무 것도 볼 수 없습니다.

물론 내가 말한 것은 흥미로운 부분 일 수 있습니다. 문제의 유일한 실제 의견은 설명 계획의 내용입니다.

+0

SQL을 테스트 한 결과 동일한 결과를 얻었습니다. 이상하게 보일지라도, 2 개의 조인은 하나의 목적을 가지고 있습니다. 하나는 열이 존재하는지 확인하는 것이고, 다른 하나는 색이 맞지 않는 것을 확인하는 것입니다. –

관련 문제