2013-10-10 5 views
1

열 A와 B가 포함 된 표가 있다고 가정 해 보겠습니다. 테이블에 다중 열 인덱스 (A, B)를 만듭니다.인덱스 순서가 중요합니까?

쿼리의 인덱스 순서를 고려해야합니까? 예를 들어,

select * from MyTable where B=? and A in (?, ?, ?); 

우리는 B를 먼저 넣고 A를 두 번째로 넣습니다. 그러나 색인은 (A, B)입니다. 명령이 중요합니까?

업데이트 : 나는 인덱스의 순서가 가장 왼쪽 접두사 규칙의 측면에서 크게를 중요한 것을 알고있다. 그러나 쿼리 자체에서 어떤 열이 먼저 나오는 것이 중요합니까?

+0

가능한 중복이다 http://stackoverflow.com/questions/3043042/does-the-order-of-conditions-in-a-where-clause- affect-mysql-performance, http://stackoverflow.com/questions/4035760/does-the-order-of-fields-in-a-where-clause-affect-performance-in-mysql – showdev

답변

2

이 경우는 아니지만 EXPLAIN 키워드를 사용하는 것이 좋습니다. 그러면 MySQL에서 사용할 최적화가 표시됩니다.

1

문제가 있다고 생각되는 검색어를 테스트 해 볼 수도 있지만 그렇지 않으면 걱정하지 않아도됩니다. 귀하의 질의는 대부분 질의 계획에 의해 원래 형태대로 엉망이 될 것입니다. 즉, MySQL은 인덱스를 사용하여 속도를 최적화하는 방법을 계획해야합니다. 이 조건에 따라 다른 순서가 필요할 수도 있지만 의심 스럽습니다. MySQL이 실제로 최적화 조건을 재정렬해야한다면 쿼리 실행과 관련하여 매우 적은 비용 (적어도 결과 집합이 큰 경우)이됩니다.

2

인덱스의 열 순서는 MySQL 최적화 프로그램이 인덱스를 사용하는 방식에 영향을 줄 수 있습니다. 특히, 복합 인덱스의 첫 번째 부분이기 때문에 MySQL은 A 열의 쿼리에 대해 복합 인덱스를 사용할 수 있습니다.

그러나 질문은 쿼리에서 열 참조 순서를 참조합니다. 여기서 옵티 마이저는 참조를 적절하게 처리하며 순서는 중요하지 않습니다. 구문 규칙을 만족 시키려면 다른 절이 특정 순서로 나와야하므로 어쨌든 거의 제어 할 수 없습니다.

다중 열 인덱스 최적화

의 MySQL 참조 here

관련 문제