본문 바로가기

프로그래밍/oracle

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길동


 

 

 

 


반응형