2011-09-07 4 views
1

5 개의 열, 예를 들어 A (기본 키), B, C, D 및 E가있는 테이블이 있습니다. 이 테이블은 거의 150,000 개의 행을 가지고 있으며이 테이블에는 인덱스가 없습니다. 예상대로 select 쿼리는 매우 느립니다.MySQL DB를위한 최상의 인덱싱 전략

이러한 쿼리는 사용자 검색 요청에 의해 생성되므로 필드 (B, C, D 및 E) 중 하나에 값을 입력 할 수 있으며 'IN'종류의 쿼리입니다. 여기에 좋은 인덱싱 전략이 무엇인지 잘 모르겠습니다. 각 열에 인덱스가 있거나 일부 조합이 있습니다.

각 열의 선택도는 동일합니다 (약 50). 도움이 될 것입니다.

답변

0

괜찮은 한 색인에 두 개의 열을 그룹화 할 수 있다면. 교차 결합과 같은 데카르트 제품을 쿼리하지 않는 한 각 열에 인덱스가있는 것은 그리 나쁘지 않습니다. 하지만 더 좋지는 않습니다 ..

3

사용자가 제공 한 것과 관계없이 동일한 쿼리를 실행하고 있습니까? 이 경우 해당 쿼리는 사용할 인덱스를 알려야합니다.

예를 들어, 쿼리는 모든 컬럼에 제한이 경우,

SELECT * FROM mytable WHERE 
    B IN (...) AND 
    C IN (...) AND 
    D IN (...) AND 
    E IN (...) 

처럼 보일 수 있습니다 경우, 모두 다섯 열이 결합 된 지수는 아마 괜찮을 것이다.

그렇지 않으면 열당 하나의 색인을 만들거나 항상 제한하는 열을 개별 색인으로 결합하십시오.

예를 들어, 조합 된 색인이있는 경우 B와 C를 사용하면 B를 제한하지 않는 쿼리는 해당 결합 된 인덱스를 사용하지 않습니다.

관련 문제