큐브리드 초보사용자입니다.^^
인덱스, 힌트 사용에 관해 궁금한것이 있습니다.
테스트는 SUBWAY 데이터베이스를 이용하였습니다.
기존에 ORACLE을 사용할 경우는 아래와 같이 사용하곤 했습니다.
생성된 인덱스의 역방향(index_desc) scan 을 통해 order by 를 사용하지 않고도,
station_id desc, bus_id desc 순으로 rownum 수 만큼만 가져올수 있도록하는것입니다.
예) oracle
create index idx_complex on bus (station_id, bus_id)
SELECT /*+ index_desc(bus idx_complex) */
station_id, bus_id
FROM bus
WHERE bus_id between 1001 and 1200
AND station_id between 1010 and 1099
AND rownum <= 10;
큐브리드에서 위의 SQL과 동일한 성능,결과를 낼수 있도록 인덱스를 설계하여 사용한다면
아래와 같이 reverse 인덱스 생성후, order by 를 포함한 SQL을 만들어야 하는것인가요?
PLAN 을 보면 idx_complex_reverse2 인덱스를 사용하는것으로 나오긴 합니다.
/* ---> skip ORDER BY */ 라는 구문도 보이는데 order by 순서와 일치하는 인덱스가 있을경우 실제 order by 는 일어나지 않는 다는 의미로 저런구문이 보이는것인지...
예) cubrid
create reverse index idx_complex_reverse2 on bus (station_id, bus_id)
SELECT *
FROM (SELECT station_id, bus_id
FROM bus
WHERE bus_id between 1001 and 1200
AND station_id between 1010 and 1099
ORDER BY station_id desc, bus_id desc
) as A
WHERE rownum <= 10;
큐브리드에서는
전체 데이터를 소팅하지 않고, 인덱스 만으로 원하는 순서대로, 필요 갯수 만큼 결과를 얻기 위해서는 제가 한것처럼 인덱스를 소팅방향에 맞게 만들고, order by 를 사용한후, rownum 을 이용해야 하는것인지.. 아니면 제가 잘못 이해하고 있는것인지..알려주세요~~~
|