개발을 하고 있을 때부터 index란 무엇인지 궁금했고, index를 사용하면 원하는 결과를 얻기가 빨라진다고 했는데
어떻게 해서 빨라지는지 매우 궁금했다.
이제서야 그 의문이 풀리는 순간이다.
자. 그럼 index가 무엇일까?
인덱스란, 전문적으로 rowid를 저장하는 객체로 테이블과는 별도로 저장된다.
그리고 block dump로 사람이 볼 수 있는 방법이 있기는 하지만, 식별하기 어렵다고 한다.
그러면 index를 생성해 보자
다음과 같은 형태의 index가 생긴다.
아래의 쿼리는 인덱스를 직접 조회하는 것은 아니고, 아래와 같은 형태의 인덱스가 생성된다는 것을 설명하기 위한 것이다.
결과를 보면 알겠지만, 위의 index는 deptno의 순서대로 정렬이 되고,
실제로 row가 저장되어 있는 곳의 주소인 rowid가 저장된다.
그리고 이 index는 두개의 컬럼으로도 만들 수 있다.
아래의 쿼리문 결과와 같은 index를 생성한다.
추가)
보통 index에 데이터를 넣는 것은 일반 테이블에 데이터 넣는 것보다 3배정도 걸림
여기서 테이블에 관련된 인덱스가 2개라면 당연히 그 배가 걸리는 것이다.
인덱스 1개
데이터 입력 1시간
인덱스 입력 3시간
인덱스 2개
데이터 입력 1시간
인덱스 입력 6시간
그리고 인덱스를 잘 만든다면 오라클의 최고수가 될 수 있다.
어떻게 해서 빨라지는지 매우 궁금했다.
이제서야 그 의문이 풀리는 순간이다.
자. 그럼 index가 무엇일까?
인덱스란, 전문적으로 rowid를 저장하는 객체로 테이블과는 별도로 저장된다.
그리고 block dump로 사람이 볼 수 있는 방법이 있기는 하지만, 식별하기 어렵다고 한다.
그러면 index를 생성해 보자
create index emp_deptno_idx on emp(deptno);
다음과 같은 형태의 index가 생긴다.
아래의 쿼리는 인덱스를 직접 조회하는 것은 아니고, 아래와 같은 형태의 인덱스가 생성된다는 것을 설명하기 위한 것이다.
select deptno, rowid
from emp
order by deptno;
from emp
order by deptno;
DEPTNO | ROWID |
---|---|
10 | AAACYIAAFAAAAAgAAG |
10 | AAACYIAAFAAAAAgAAI |
10 | AAACYIAAFAAAAAgAAN |
20 | AAACYIAAFAAAAAgAAD |
20 | AAACYIAAFAAAAAgAAM |
20 | AAACYIAAFAAAAAgAAK |
20 | AAACYIAAFAAAAAgAAA |
20 | AAACYIAAFAAAAAgAAH |
30 | AAACYIAAFAAAAAgAAC |
30 | AAACYIAAFAAAAAgAAJ |
30 | AAACYIAAFAAAAAgAAB |
30 | AAACYIAAFAAAAAgAAL |
30 | AAACYIAAFAAAAAgAAF |
30 | AAACYIAAFAAAAAgAAE |
결과를 보면 알겠지만, 위의 index는 deptno의 순서대로 정렬이 되고,
실제로 row가 저장되어 있는 곳의 주소인 rowid가 저장된다.
그리고 이 index는 두개의 컬럼으로도 만들 수 있다.
create index emp_deptno_sal_idx on emp(deptno, sal);
아래의 쿼리문 결과와 같은 index를 생성한다.
select deptno, sal, rowid
from emp
order by 1, 2, 3;
from emp
order by 1, 2, 3;
DEPTNO | SAL | ROWID |
---|---|---|
10 | 1300 | AAAM3/AAEAAAAa2AAN |
10 | 2450 | AAAM3/AAEAAAAa2AAG |
10 | 5000 | AAAM3/AAEAAAAa2AAI |
20 | 800 | AAAM3/AAEAAAAa2AAA |
20 | 1100 | AAAM3/AAEAAAAa2AAK |
20 | 2975 | AAAM3/AAEAAAAa2AAD |
20 | 3000 | AAAM3/AAEAAAAa2AAH |
20 | 3000 | AAAM3/AAEAAAAa2AAM |
30 | 950 | AAAM3/AAEAAAAa2AAL |
30 | 1250 | AAAM3/AAEAAAAa2AAC |
30 | 1250 | AAAM3/AAEAAAAa2AAE |
30 | 1500 | AAAM3/AAEAAAAa2AAJ |
30 | 1600 | AAAM3/AAEAAAAa2AAB |
30 | 2850 | AAAM3/AAEAAAAa2AAF |
추가)
보통 index에 데이터를 넣는 것은 일반 테이블에 데이터 넣는 것보다 3배정도 걸림
여기서 테이블에 관련된 인덱스가 2개라면 당연히 그 배가 걸리는 것이다.
인덱스 1개
데이터 입력 1시간
인덱스 입력 3시간
인덱스 2개
데이터 입력 1시간
인덱스 입력 6시간
그리고 인덱스를 잘 만든다면 오라클의 최고수가 될 수 있다.