열 순서는 색인이 있어야합니까?


35

검색 결과에 사용되는 색인을 테이블에 추가했습니다. ASC 또는 DESC 순서로 결과를 표시하고 있습니다. 그래서 그 열에는 색인이 있어야합니까? 해당 테이블에 인덱스가 2 개 더 있습니다. 해당 열에 색인을 만들거나 만들지 않으면 성능에 어떤 영향을 미칩니 까?


2
검색어를 게시하십시오
RolandoMySQLDBA

답변:


26

예, 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로 끝날 수 있습니다. 이 키워드는 오름차순 또는 내림차순 인덱스 값 스토리지를 지정하기위한 향후 확장에 허용됩니다. 현재는 파싱되었지만 무시됩니다. 인덱스 값은 항상 오름차순으로 저장됩니다.


3
"MySQL은 혼합 ASC, DESC에 색인을 사용할 수 없습니다 . " 이것에 대한 참조?
ypercubeᵀᴹ

CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);작동해야합니다.
Frank Heikens

내 출처는 내 대답에 연결된 mysql 설명서입니다. "믹스"를 검색하십시오.
Aaron Brown

3
MySQL은 CREATE INDEX에서 asc & Desc를 구문 분석하지만 무시합니다. 인덱스는 항상 오름차순으로 저장됩니다. dev.mysql.com/doc/refman/5.5/en/create-index.html
Aaron Brown

1
새로운 MySQL은 8.0 : 이제의 혼합물을 사용 ASC하고 DESC 있는 경우INDEX같은 혼합물이있다.
Rick James

4

PostgreSQL과 관련하여 답변이 궁금한 사람은 인덱스가 사용됩니다. 당으로 PostgreSQL의 문서 쿼리 플래너는 "규격과 일치 가능한 인덱스를 스캔하여 하나 사양에 따라 주문을 만족 고려할 것, 또는 물리적 위해 테이블을 스캔하고 명시 적 분류를 수행하여." 즉, 플래너가 사용할 수있는 인덱스가 있으면 일치하는 행을 검색 한 후 정렬을 다시 수행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.