2017-01-12 2 views
0

다중 열 인덱스 (이름, 유형)가있는 테이블이 있습니다. 다중 coulmn 인덱스 (이름, 유형)는 연산자가있는 where 절에 유용합니까?

Select * 
from [table_name] a 
where a.name = '[some_name]' and (a.type = '1' or a.type = '2' or a.type = '3') 

가의 테이블 레코드의 수백만

+2

[EXPLAIN'] (http://dev.mysql.com/doc/refman/5.7/en/using-explain.html)을 사용하여이 질문에 직접 대답하여 쿼리의 인덱스 사용을 분석 할 수 있습니다. –

답변

0

인덱스가 도움이 될 것입니다을 가지고 있다고 가정 해 봅시다, 인덱스

Select * 
from [table_name] a 
where a.name = '[some_name]' and a.type in ('1','2','3') 

같은 쿼리를 위해 도움이 될 것입니다 또는 같은 쿼리가 더 나은 것 가능성이 가장 높습니다. 나는 name 컬럼의 성질에 의존하기 때문에 가장 가능성이 높습니다. 수백만 개의 행이 있지만 Name (가능한 한 적은 수의 selectivity 조건)에 대해 가능한 몇 가지 값만있는 경우 색인이 너무 유용하지는 않지만 그럴 가능성은 낮습니다.

IN 또는 =OR을 사용하는 경우 쿼리 계획이 동일해야합니다.

0

큰 요인은 SELECT *입니다. WHERE 절이 테이블의 80 %를 되 돌리는 경우, *를 수행하기 위해 테이블이 필요하므로 LOOKUP을 수행하기 위해 인덱스를 사용하는 대신 전체 테이블을 스캔하는 쿼리가 더 빠를 수도 있습니다.

제한된 수의 열만 선택하면 색인 내에 모든 열이있는 경우 색인 만 읽고 테이블을 읽어야합니다.