안녕하세요. 1억건정도의 데이터에서 페이징 처리를 위해 사이트내용등을 참조해서
부분범위처리를 위해 row_num을 활용한 top-n queries(oracle 12c에서는 offset --rows를 사용)사용하려고 하고 있습니다.(맞는말인지 모르겠네요..);;;
궁금한 사항은 검색조건이 A~L까지라고 했을때 결합인덱스를 사용해 정렬조건 및 검색속도 개선을 하고 싶은데요..
필수사용조건 A:코드성(=), B:기간(between:서브 쿼리 사용을 통한 in으로 변경) 두개 정도 이며
나머지 조건들은 선택성에 의한 다양한 조건들이 존재합니다.
사용빈도가 많은 A,B컬럼만 결합 인덱스로 사용할 경우 나머지 조회조건이 포함될 때 확인랜덤액세스가 발생될 거 같고...
이 랜덤액세스를 줄이기 위해 나머지 컬럼 인덱스를 통합해서 A~L 다 결합한 인덱스를 생성하려고 하는데, 이 방법이
괜찮은 방법일까요...만약 A~L의 결합인덱스를 생성했을때 A,B만 사용할 경우도 A~L의 인덱스를 탈지와 결합인덱스 컬럼 순서를 어떻게
배치하는게 좋을까요??
네. 답변 감사합니다...
쿼리부분은 -다음-과 같고..모든 조회조건을 추가해줬네요. 질문답변쪽에서 마농님 글잘 읽고 있습니다.
감사합니다. 인덱스를 여러개 만들고 union all 로 합쳐주려다가(select /*+ hint */ * from table where d is null union all select /*+ hint */ * from table where d is null -> 이런식으로 하면 c조건이 없을 경우 select 절을 안타는것을 이용...) 조합 갯수가 너무 많아서...문의글남겼던거였습니다..
어느것이 효율이 더좋을 지 궁금하기도 하구요..
-다음-
SELECT
P.*
FROM
(
SELECT
rowNo AS no,
Q.*
FROM
(
SELECT /*+ INDEX_DESC(h index_001)*/
A,
B,
....Z
FROM TB_RT_VH_TR_201802 h
WHERE A = ''
AND B BETWEEN '' AND ''
--A,B는 필수
<if test="c" != null and c != ''">
(AND C = ''
<IF>
....
<if test="L" != null and L != ''">
AND L = ''
</IF>
OFFSET ((50-1)*10) ROWS FETCH NEXT 10 ROWS ONLYkd
)Q
)P;