ORDER BY 구문을 이용할 때 아래와 같이 order 방식을 다르게 SELECT를 할 필요가 있는 경우가 있다.

SELECT *
FROM tablename
ORDER BY A DESC, B ASC, C ASC

위와 같이 쿼리를 날리게되면, index를 만들 때 A,B,C 컬럼에 composit index가 생성이 되어 있더라도, 정렬이 모두 DESC나 ASC로 되어 있다면 결국 index를 제대로 활용 못하고 filesort가 나게 된다.

도움말을 찾아보면 아래와 같이 INDEX 생성 시점에 columnname [ASC | DESC] 와 같이 정렬 순서를 컬럼별로 줄 수 있다고 써있다.




CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name 
[index_type] 
ON tbl_name (index_col_name,...) 
[index_option ...] 

index_col_name: 
col_name [(length)] [ASC | DESC] 

index_type: 
USING {BTREE | HASH | RTREE} 

index_option: 
KEY_BLOCK_SIZE value | index_type | WITH PARSER parser_name



그래서 실제로 적용해 봤는데, 그래도 계속 filesort가 발생해서 도움말을 좀 더 읽어봤더니... 역시나 --;;

An index_col_name specification can end with ASC or DESC. These keywords are allowed for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.

앞으로 추가될 기능이라는 얘기가 있었다. parse는 잘 되지만 무시한다고 --;;

+ Recent posts