source

MySQL에서 DESC 인덱스를 만들려면 어떻게 해야 합니까?

factcode 2023. 9. 11. 22:16
반응형

MySQL에서 DESC 인덱스를 만들려면 어떻게 해야 합니까?

필드에서 순서대로 정렬된 행을 내림차순으로 구해야 하는 표가 있습니다.실행 시EXPLAIN쿼리는 다음과 같습니다.

EXPLAIN SELECT ... FROM table WHERE ... ORDER BY field DESC

알겠습니다.Using where; Using filesort에서Extra기둥.그래서 제가 지금.DESC색인:

CREATE INDEX name ON table (field DESC);

하지만 달리다 보면EXPLAIN다시 말하지만, 나도 같은 생각을 합니다.Using where; Using filesort에서Extra칼럼과 퍼포먼스는 거의 비슷합니다.

내가 뭘 잘못하고 있는 거지?

이는 단순히 구현되지 않았기 때문에 어떤 작업을 수행하라는 요청을 무시하는 MySQL의 "기능" 중 하나입니다.

출처: http://dev.mysql.com/doc/refman/5.5/en/create-index.html

"index_col_name 규격은 ASC 또는 DESC로 끝날있습니다. 이러한 키워드는 오름차순 또는 내림차순 인덱스 값 저장을 지정하기 위해 추후 확장에 사용할 수 있습니다. 현재 이 값은 구문 분석되지만 무시됩니다. 인덱스 값은 항상 오름차순으로 저장됩니다.

버전 8부터 시작하는 MySQL은 내림차순 인덱스를 지원합니다.이전 버전에서는 인덱스를 만들 때 "DESC" 절이 자동으로 무시되었습니다.인덱스가 양방향이기 때문에 모든 열이 모든 ASC 또는 모든 DESC 중 하나의 방향을 가지는 (a) 단일 열 인덱스 또는 (b) 다중 열 인덱스에서는 문제가 되지 않았습니다.

그러나 열 방향이 다른 다중 열 인덱스가 필요한 경우 다음과 같이 여러 개의 쿼리를 실행합니다.

SELECT * from MyTable WHERE ColumnA = 1 ORDER BY ColumnB ASC, ColumnC DESC

필요한 인덱스는 다음과 같습니다. (A열, B열 ASC열, C열 DESC열).

버전 8 이전에는 MySQL에서 이러한 매개 변수를 사용하여 인덱스를 만들 수 있었지만 실제로는 모든 열이 오름차순(ColumnA ASC, ColumnB ASC, ColumnC ASC)으로 자동으로 생성되었습니다.

따라서 쿼리는 해당 인덱스를 완전히 사용할 수 없습니다. C 열에 대해 색인화되지 않은(파일 정렬) 데이터를 사용하는 동안 인덱스에서 A 열과 B 열만 가져왔습니다.

MySQL 8.0 이상 버전에서는 이 문제가 더 이상 발생하지 않습니다.https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html 참조

MySQL 버전 8은 2018년 4월 19일(v8.0.11) 일반용으로 출시되었습니다.

앞서 언급한 바와 같이 이 기능은 구현되지 않았지만 몇 가지 해결 방법이 관심을 끌 수 있습니다.

한 가지 가능성은 필드를 음의 값 또는 역의 값으로 저장하는 것입니다.

번호인 경우 저장할 수 있으며(-n), 서명되지 않은 경우 (MAXVAL -n)

날짜나 타임스탬프라면 숫자를 대신 저장하고 FROM_UNIXTIME()과 같은 함수를 사용할 것을 권장합니다.

물론 그런 변화가 항상 쉽게 이루어지는 것은 아닙니다.기존 코드 등에 따라 달라집니다.

언급URL : https://stackoverflow.com/questions/10109108/how-do-i-create-a-desc-index-in-mysql

반응형