2010-08-17 2 views
1

빠른 질문입니다. 이 구조를 가진 간단한 테이블을 가지고 있습니다 :MySQL : ORDER BY 호출 (다른 필드)에 대해 각 필드에 대한 인덱스를 만들 수 있습니까?

USERS_TABLE = {id}, name, number_field_1, number_field_2, number_field_3, number_field_4, number_field_5 

정렬은 한 번에 한 필드 씩 주요 기능입니다. 표에는 최대 5 천만 개의 레코드가있을 수 있습니다. 대부분의 선택은 "id"필드를 사용하여 수행됩니다.이 필드는 기본 키이며 인덱싱됩니다.

샘플 쿼리

SELECT * FROM USERS_TABLE WHERE id=10 ORDER BY number_field_1 DESC LIMIT 100; 

질문 :

내가 각각에 대해 별도의 인덱스를 만들려면 어떻게해야합니까 "number_field_을 *"문에 의해 ORDER을 최적화하거나 최적화 할 수있는 더 좋은 방법이 할? 감사합니다

답변

1

여기에 은색 글 머리 기호가 없으므로 데이터와 쿼리를 테스트해야합니다.

모든 검색어 (예 : WHERE id = 10)가 몇 개의 행을 반환하면 항목을 열별로 색인화 할 필요가 없습니다. 반면에 많은 행을 반환하면 크게 도움이 될 수 있습니다.

항상 필드 중 하나 이상으로 정렬하는 경우 해당 열 또는 이러한 열의 복합 인덱스에 대한 인덱스를 만드는 것이 좋습니다. 복합 인덱스가 (num_field_1, num_field_2) 및 당신은 num_field_2에 의해서만 주문합니다, 그 색인은 사용되지 않을 것입니다. 색인을 사용하려면 색인의 가장 왼쪽 필드를 포함시켜야합니다.

다른 한편으로는 많은 다른 필드를 갖고있는 것처럼 보이며, 각각의 필드마다 인덱스를 만드는 단점은 인덱스가 훨씬 커지고 삽입/삭제/업데이트된다는 것입니다 느리게 시작될 수 있습니다.

기본적으로 바로 가기가 없습니다. 쿼리를 신중하게 분석하면서 어떤 인덱스가 최적의 쿼리로 작동하고 조정해야합니까? EXPLAIN

+0

답을 보내 주셔서 감사합니다. 나는 50k 레코드를 정렬하는 것이 많든 적든간에 카운트를 반환하는지 잘 모르겠다. 좀 많은 것 같은데. 나는 확실히 EXPLAIN 함수를 사용하여 검사 할 것이다. – Amer

+0

50k는 많은 것으로 간주됩니다. – nos

관련 문제