오라클 힌트(Hint) 사용 예제
SQL*Plus로 scott 계정으로 로그인한 후 test라는 테이블을 만들어 실습을 합니다.
SQL> create table test (
2 id number not null primary key,
3 name varchar2(20)
4 );
테이블이 생성되었습니다.
데이터는 5건 넣는데 순서를 잘 보시기를 바랍니다.
기본적으로 select하면 넣은 순서대로 나옵니다.
SQL> insert into test values (4,'4길동');
1 개의 행이 만들어졌습니다.
SQL> insert into test values (3,'3길동');
1 개의 행이 만들어졌습니다.
SQL> insert into test values (5,'3길동');
1 개의 행이 만들어졌습니다.
SQL> insert into test values (1,'1길동');
1 개의 행이 만들어졌습니다.
SQL> insert into test values (2,'2길동');
1 개의 행이 만들어졌습니다.
SQL> select * from test;
ID NAME
---------- --------------------
4 4길동
3 3길동
5 3길동
1 1길동
2 2길동
그래서 이름으로 정렬하여 볼려면...
(그런데 order by는 사용하지 말라고 권고 하고 있죠.. .별도의 소트를 위한 공간을 이용하여 데이터를 정렬하므로 DB에겐 OverHead 가 있는거죠... 물론 대량의 데이터 일때...)
SQL> select * from test order by name;
ID NAME
---------- --------------------
1 1길동
2 2길동
3 3길동
5 3길동
4 4길동
이 경우 인덱스를 이용하면 쉽게 정렬된 데이터를 볼 수가 있습니다.
(멋지죠^^)
SQL> create index idx_test_name on test(name);
인덱스가 생성되었습니다.
SQL> select * from test where name > ' ';
ID NAME
---------- --------------------
1 1길동
2 2길동
3 3길동
5 3길동
4 4길동
그럼 이번에는 이름 역순으로 데이터를 가지고 올려고 합니다.
어떻게 할까요.. 아래처럼 order by를 descending으로 할까요...?
SQL> select * from test order by name desc;
ID NAME
---------- --------------------
4 4길동
3 3길동
5 3길동
2 2길동
1 1길동
이럴때 힌트라는 것을 이용하면 쉽게 해결할 수가 있습니다...
SQL> select /*+ index_desc (test, idx_tes_name) */ *
2 from test
3 where name > ' ';
ID NAME
---------- --------------------
1 1길동
2 2길동
3 3길동
5 3길동
4 4길동
'프로그래밍 > oracle' 카테고리의 다른 글
오라클 COUNT(*) 빠르게 하기 — 인덱스 패스트 풀 스캔 활용법 (0) | 2025.02.27 |
---|---|
oracle - 효과적인 MAX(num) 가져오기 (오라클힌트사용) (0) | 2012.08.17 |
oracle - 행을 열로 바꾸는 쿼리 (0) | 2012.08.17 |
oracle - 클러스터 (0) | 2012.08.17 |
oracle - 오라클에서 자동증가칼럼(Sequence) 사용하기 (0) | 2012.08.17 |