답변:
예, MySQL은 특정 조건 하에서 ORDER BY의 열에 인덱스를 사용할 수 있습니다. 그러나 MySQL은 ( )의 혼합 ASC, DESC 순서에 대한 인덱스를 사용할 수 없습니다 SELECT * FROM foo ORDER BY bar ASC, pants DESC
. 쿼리와 CREATE TABLE 문을 공유하면 질문에보다 구체적으로 답변하는 데 도움이됩니다.
ORDER BY 절을 최적화하는 방법에 대한 힌트 : http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html
수정 2012-01-21 8:53 AM
ORDER BY에서 ASC / DESC가 혼합 된 인덱스를 사용하는 것에 대한 진술의 출처에 대한 질문이있었습니다. 로부터 최적화 BY ORDER 문서 :
경우에 따라 MySQL은 인덱스를 사용하여 ORDER BY를 확인할 수 없지만 여전히 인덱스를 사용하여 WHERE 절과 일치하는 행을 찾습니다. 이러한 경우에는 다음이 포함됩니다.
...
ASC와 DESC를 혼합합니다.
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
...
또한 CREATE INDEX에서 DESC 키워드는 의미 가 없습니다 .
index_col_name 스펙은 ASC 또는 DESC로 끝날 수 있습니다. 이 키워드는 오름차순 또는 내림차순 인덱스 값 스토리지를 지정하기위한 향후 확장에 허용됩니다. 현재는 파싱되었지만 무시됩니다. 인덱스 값은 항상 오름차순으로 저장됩니다.
CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);
작동해야합니다.
ASC
하고 DESC
있는 경우 은 INDEX
같은 혼합물이있다.
PostgreSQL과 관련하여 답변이 궁금한 사람은 인덱스가 사용됩니다. 당으로 PostgreSQL의 문서 쿼리 플래너는 "규격과 일치 가능한 인덱스를 스캔하여 하나 사양에 따라 주문을 만족 고려할 것, 또는 물리적 위해 테이블을 스캔하고 명시 적 분류를 수행하여." 즉, 플래너가 사용할 수있는 인덱스가 있으면 일치하는 행을 검색 한 후 정렬을 다시 수행합니다.