oracle - 오라클 힌트(Hint) 사용 예제
오라클 힌트(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길동