다중 열 인덱스 (이름, 유형)가있는 테이블이 있습니다. 다중 coulmn 인덱스 (이름, 유형)는 연산자가있는 where 절에 유용합니까?
Select *
from [table_name] a
where a.name = '[some_name]' and (a.type = '1' or a.type = '2' or a.type = '3')
가의 테이블 레코드의 수백만
다중 열 인덱스 (이름, 유형)가있는 테이블이 있습니다. 다중 coulmn 인덱스 (이름, 유형)는 연산자가있는 where 절에 유용합니까?
Select *
from [table_name] a
where a.name = '[some_name]' and (a.type = '1' or a.type = '2' or a.type = '3')
가의 테이블 레코드의 수백만
인덱스가 도움이 될 것입니다을 가지고 있다고 가정 해 봅시다, 인덱스
Select *
from [table_name] a
where a.name = '[some_name]' and a.type in ('1','2','3')
같은 쿼리를 위해 도움이 될 것입니다 또는 같은 쿼리가 더 나은 것 가능성이 가장 높습니다. 나는 name
컬럼의 성질에 의존하기 때문에 가장 가능성이 높습니다. 수백만 개의 행이 있지만 Name
(가능한 한 적은 수의 selectivity 조건)에 대해 가능한 몇 가지 값만있는 경우 색인이 너무 유용하지는 않지만 그럴 가능성은 낮습니다.
IN
또는 =
및 OR
을 사용하는 경우 쿼리 계획이 동일해야합니다.
큰 요인은 SELECT *입니다. WHERE 절이 테이블의 80 %를 되 돌리는 경우, *를 수행하기 위해 테이블이 필요하므로 LOOKUP을 수행하기 위해 인덱스를 사용하는 대신 전체 테이블을 스캔하는 쿼리가 더 빠를 수도 있습니다.
제한된 수의 열만 선택하면 색인 내에 모든 열이있는 경우 색인 만 읽고 테이블을 읽어야합니다.
[EXPLAIN'] (http://dev.mysql.com/doc/refman/5.7/en/using-explain.html)을 사용하여이 질문에 직접 대답하여 쿼리의 인덱스 사용을 분석 할 수 있습니다. –