프로그래머의 삶 Programmer's Life/Database-Oracle&MySQL

의사 컬럼

Oliver's World 2008. 11. 11. 14:45
728x90






의사컬럼(Raeudocolumns) - 테이블에 있는 일반적인 컬럼처럼 행동하기는 하지만 실제로 테이블에 저장되어 있지 않은 컬럼, 유령컬럼이라고도 부른다네~

종류로는 ROWNUM , ROWID 가 있다.

1. ROWNUM

SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> select dname, loc, rownum from dept where rownum<=3;

DNAME          LOC               ROWNUM
-------------- ------------- ----------
ACCOUNTING     NEW YORK              1
RESEARCH         DALLAS                   2
SALES               CHICAGO                 3

딱 보면 알겠지만~ 페이징 처리할때 로우넘을 두번 휙휙~ 하면 된다. 하지만.....
데이터의 양이 많이 경우 페이징처리에서는 인덱스사용을 추천- _-)b
데이터의 양이 적은데 괜히 인덱스 사용하면....오히려 퍼포먼스 다운!!~~되는건 잊지말자= _=;

2. ROWID - 테이블에 저장된 각각의 로우들이 저장된 주소값을 가진 의사컬럼이다. 즉 모든 테이블의 모든 로우들은 오직 자신만의 유일한 ROWID 값을 갖고 ROWID 로 식별할수도 있다.

SQL> select dname,deptno, rowid from dept;

DNAME            DEPTNO   ROWID
-------------- ---------- ------------------
ACCOUNTING       10        AAAHW5AABAAAMUSAAA
RESEARCH           20        AAAHW5AABAAAMUSAAB
SALES                  30        AAAHW5AABAAAMUSAAC
OPERATIONS        40        AAAHW5AABAAAMUSAAD

위에서 보면 눈에 딱 보이는 저것!! ROWID!! 저것의 특징으로 말하면 세가지가 있다.

1. 단일 로우에 접근하는 가장 빠른수단
2. 테이블에 로우들이 어떻게 저장되는지를 보여준다
3. 한 테이블에서 ROWID 값은 유일한 값이다.

.....=_=;그냥..별거 없다?...라고 봐도 ....단일 로우 접근에 가장 빠르고 유일한 값이다...가 끝인듯..

뭐....ROWNUM이나 ROWID 는 SELCT 나 WHERE에서 사용이 가능하지만 INSERT나 UPDATE에서는 실제로 테이블에 저장된 값이 아니기 때문에 안된다....

당연하지..=_=;;;..







728x90