블로그 이미지
신비마마

태그목록

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

오라클 힌트 사용 예제

2009. 3. 12. 19:37 | Posted by 신비마마
오라클 힌트(Hint) 사용 예제
SQL*Plus로 scott 계정으로 로그인한 후 emp 라는 테이블을 만들어 실습을 합니다.

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,'5길동');

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        5길동
1        1길동
2        2길동

그래서 이름으로 정렬하여 볼려면...
(그런데 order by는 사용하지 말라고 권고 하고 있죠.. .별도의 소트를 위한 공간을 이용하여 데이터를 정렬하므로 대량의 데이터일땐 DB에겐 OverHead 가 있는거죠... .)

SQL> select * from test order by name;

        ID NAME
---------- --------------------
1        1길동
2        2길동
3        3길동
4        4길동
5        5길동

이 경우 인덱스를 이용하면 쉽게 정렬된 데이터를 볼 수가 있습니다.
(멋지죠^^)

SQL> create index idx_test_name on test(name);

인덱스가 생성되었습니다.

SQL>select /*+index(TEST,IDX_TEST_NAME)*/ name from test
where name is not null;
        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 is not null;

        ID NAME
---------- --------------------
         1 1길동
         2 2길동
         3 3길동
         5 3길동
         4 4길동