테스트 버전: CUBRID 2008 R3.0 (8.3.0.0337)
요약
CUBRID에서는 Primary key를 생성하면 asc 순으로 생성됩니다. 따라서 desc로 order by를 하게 되면 index를 타지 못하게 되죠. Primary key 생성 시 desc로 별도로 생성하지는 못하고요, primary key를 desc 순으로 생성하려면, unique index를 desc로 생성하여야 합니다.
이렇게 하면 order by desc 시 추가된 unique index 를 사용할 수 있게 됩니다.
테스트
먼저 테이블을 생성하고 데이터를 넣습니다.
csql> create table member_tbl(id int primary key, name varchar(10)); |
여기서 desc로 조회한다면 (최신 회원가입 순으로 조회가 대부분) 다음과 같이 되는데, 인덱스를 타지 않고 순차 검색(sequential scan)을 하는 것을 확인할 수 있습니다.
csql> select * from member_tbl order by id desc for orderby_num() between 1 and 2;
|
이제 원하는 것은, desc로 unique key를 생성하여 desc 로 조회할 때도 인덱스를 타게 하는 것입니다.
primary key를 desc로 바로 생성하지는 않으므로, unique 인덱스를 추가로 생성합니다.
csql> create unique index idx_u_member_tbl_id on member_tbl(id desc); |
이제 desc로 질의 수행 시 idx_u_member_tbl_id 인덱스를 타는 것을 확인할 수 있습니다.
csql> select * from member_tbl order by id desc for orderby_num() between 1 and 2; |