programming/MySQL
mysql 5.x index 생성 구문과 ORDER BY A DESC, B ASC...
happy4u
2010. 2. 3. 16:18
ORDER BY 구문을 이용할 때 아래와 같이 order 방식을 다르게 SELECT를 할 필요가 있는 경우가 있다.
그래서 실제로 적용해 봤는데, 그래도 계속 filesort가 발생해서 도움말을 좀 더 읽어봤더니... 역시나 --;;
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
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는 잘 되지만 무시한다고 --;;