SlideShare a Scribd company logo
SQL초보에서 Schema Objects까지
11. 인덱스(INDEX)
 테이블의 칼럼에 대해 생성되는 객체로 별도의 영역(테이블스페이스)에 칼럼값들을 정렬한 후
생성한다. 데이터 검색 속도를 향상 시키기 위해 사용되며, 포인터를 이용하여 데이터를 램덤
액세스 한다.
 한번 생성되면 오라클에 의해 내부적으로 자동 관리된다.
 오라클에서 Create Index로 인덱스를 생성하면 B*Tree(balanced Tree) 인덱스가 생성되며 어떠
한 행을 접근하든지 액세스 타임이 동일한다.
 WHERE절 or 조인절에 빈번히 출현되는 칼럼의 경우 대부분 인덱스가 필요하다.
 칼럼값의 분포도가 10%~15% 인 경우 인덱스가 효율적이다.
 삽입, 삭제가 빈번한 테이블에는 인덱스의 사용을 자제해야 한다.
[형식]
CREATE [UNIQUE] INDEX index_name
ON table_name (Column|Expr[,Column|Expr]...);
11.1 단일/복합(결합) 인덱스(Single Column/Composite Index)
 단일 인덱스는 하나의 칼럼으로 인덱스가 구성된 것이며, 복합 인덱스란 두개 이상의 칼럼으
로 인덱스가 생성된 경우이다.
1. EMP 테이블 ENAME 칼럼에 단일 인덱스를 생성하자.
create index idx_emp_ename on emp(ename)
-- 생성된 인덱스에 대한 확인은 USER_INDEXES 뷰에서 확인 가능하다.
select table_name, index_name, visibility from user_indexes
where table_name = 'EMP'
TABLE_NAME INDEX_NAME VISIBILITY
------------------------------ ------------------------------ ----------
EMP IDX_EMP_ENAME VISIBLE
EMP PK_EMP VISIBLE
2. EMP 테이블에서 ENAME, SAL로 복합 인덱스를 구성해 보자.
create index idx_emp_ename_sal on emp(ename, sal)
select table_name, index_name, visibility from user_indexes
where table_name = 'EMP'
TABLE_NAME INDEX_NAME VISIBILITY
------------------------------ ------------------------------ ----------
EMP IDX_EMP_ENAME_SAL VISIBLE
EMP IDX_EMP_ENAME VISIBLE
EMP PK_EMP VISIBLE
11.2 고유/비고유 인덱스(Unique/Non Unique Index)
 고유 인덱스는 칼럼의 값들이 유일한 경우에 만들 수 있는 인덱스이고 비고유 인덱스는 칼럼
값에 중복된 값이 있는 경우 만드는 인덱스이다.
1. EMP 테이블에서 ENAME 칼럼에 대해 생성되어 있는 인덱스를 제거하시오.
-- EMP 테이블의 ENAME 칼럼에 대해 생성되어 있는 인덱스는 아래 쿼리로 확인하자.
select a.index_name
from USER_IND_COLUMNS a, USER_INDEXES b
where a.table_name = 'EMP'
and a.index_name = b.index_name
and a.column_name = 'ENAME'
INDEX_NAME
------------------------------
IDX_EMP_ENAME
IDX_EMP_ENAME_SAL
Drop index IDX_EMP_ENAME;
Drop index IDX_EMP_ENAME_SAL;
2. EMP 테이블에서 ENAME 칼럼에 대해 고유인덱스(Unique Index)를 생성 하시오.
-- 만약 ename 칼럼에 중복되는 값이 있다면 아래 create index 구문은 오류가 발생한다.
create unique index idx_emp_ename on emp(ename);
3. EMP 테이블에서 DEPT 칼럼에 대해 비고유인덱스(Non Unique Index)를 생성 하시오.
create index idx_emp_deptno on emp(deptno)
11.3 Descending Index
 인덱스 생성시 칼럼명 다음에 아무값도 안써주면 기본적으로 오름차순(ASCENDING) 이지만
DESC 라고 기술하면 내림차순(DESCENDING)으로 인덱스가 생성된다.
1. EMP 테이블에서 JOB은 오름차순, SAL 칼럼은 내림차순으로 인덱스를 생성 하시오.
create index idx_emp_job_sal on emp(job, sal desc)
11.4 함수기반 인덱스(Function Based Index)
 SQL 문장의 WHERE 절에 SQL함수(SQL Function)가 사용되는 경우 인덱스 컬럼에 변형이 생
겨 인덱스를 사용하지 못하게 되는데 이 경우 함수 기반 인덱스를 사용하면 된다.
 칼럼에 대해 SQL함수 등을 적용하여 인덱스를 생성한다.
 함수 기반 인덱스는 내부적으로 비트맵 인덱스로 생성된다.
1. 아래와 같은 쿼리를 보자.
-- 아래 쿼리를 보면 EMP 테이블의 ENAME 칼럼은 인덱스가 생성되어 있다.
select a.index_name
from USER_IND_COLUMNS a, USER_INDEXES b
where a.table_name = 'EMP'
and a.index_name = b.index_name
and a.column_name = 'ENAME'
INDEX_NAME
------------------------------
IDX_EMP_ENAME
-- 아래 쿼리는 인덱스 칼럼에 변형이 생긴 경우 이므로 인덱스를 이용하지 못하게 된다. 데이터
건수가 많은 경우 성능상문제가 될 수 있다.
SQL> set autotrace on explain
SQL> select ename, sal from emp
2 where lower(ename) = 'smith';
ENAME SAL
---------- ----------
SMITH 1000
Execution Plan
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 9 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 1 | 9 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
-- lower(ename) 전체를 함수기반 인덱스로 생성하자.
SQL> conn / as sysdba;
SQL>alter session set QUERY_REWRITE_ENABLED = TRUE;
SQL>alter session set QUERY_REWRITE_INTEGRITY=TRUSTED;
SQL>grant query rewrite to scott;
SQL>conn scott/tiger
SQL> create index fidx_emp_ename on emp( lower(ename) ); --함수기반인덱스 생성
SQL> select ename, sal from emp
2 where lower(ename) = 'smith';
ENAME SAL
---------- ----------
SMITH 1000
Execution Plan
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 16 | 2 (
| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 16 | 2 (
|* 2 | INDEX RANGE SCAN | FIDX_EMP_ENAME | 1 | | 1 (
11.5 인덱스 재구성 및 삭제
칼럼에 대해 생성된 인덱스에 변형(데이터 삽입, 삭제, 수정)이 자주 발생하는 경우 균형잡힌 트리
(Balanced Tree)의 모양이 아닌 트리가 한쪽으로 기울어 지는 현상이 생길 수 있다. 이러한 경우
인덱스를 재구성 또는 삭제 후 재생성 해야 한다.
1. EMP 테이블의 ENAME 칼럼에 대해 생성된 인덱스를 재구성 하세요.
Alter index idx_emp_ename rebuild;
2. EMP 테이블의 ENAME 칼럼에 대해 생성된 인덱스를 삭제 하시요.
Drop index idx_emp_ename;
11.6 인덱스 숨기기(Index Invisible)
QUERY 작업을 할 때 가끔은 인덱스가 없다면 실행계획이 어떻게 될까, 고민 하면서 인덱스를
DROP 하고 실행 계획을 본 후 다시 INDEX를 생성하여 실행 계획을 본 적이 있을 것이다. 적은
량의 데이터를 가진 테이블이라면 문제가 아닐텐데 많은 양의 데이터가 있는 테이블 이라면 삭제
하고 생성하는데 부담이 있다. 이때 사용할 수 있는 것이 Oracle 11g에서 새로 소개된 INVISIBLE
INDEX인데 인덱스를 invisible로 만들어서 옵티마이저에서 명시적으로 사용하지 말라고 지시를 할
수 있다.
SQL> set autotrace on explain
-- 인덱스가 생성되어 있으니 CBO에서 이용한다.
SQL> SELECT count(*) FROM emp WHERE sal > 1500;
COUNT(*)
----------
10
Execution Plan
-- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- - -- - - -- -- - -- -- -- - -- -- --
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- --
| 0 | SELECT STATEMENT | | 1 | 4 | 1 (0)| 0 0:00:01 |
| 1 | SORT AGGREGATE | | 1 | 4 | | |
|* 2 | INDEX RANGE SCAN| IDX_EMP_SAL | 10 | 40 | 1 (0)| 00:00:01 |
--------- -- - -- -- - -- -- -- - -- -- -- - -- -- - -- -- -- - -- -- - -- -- -- - -- -- - -- -- -- - -- -- - -- -- - - - - -
-- SAL 칼럼에 생성되어 있는 인덱스를 숨기자.
SQL> ALTER INDEX IDX_EMP_SAL invisible;
인덱스가 변경되었습니다.
SQL> SELECT count(*) FROM emp WHERE sal > 1500;
COUNT(*)
----------
10
Execution Plan
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 0 | SELECT STATEMENT | | 1 | 4 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 4 | | |
|* 2 | TABLE ACCESS FULL| EMP | 10 | 40 | 3 (0)| 00:00:01 |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SQL> ALTER INDEX IDX_EMP_SAL visible;
인덱스가 변경되었습니다.

More Related Content

PPTX
3.2 실행계획 sql 연산 (concatenation)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
2.4 optimizer mode를 변경하는 힌트(choose)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3.1 실행계획 sql 연산 (and equal)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3.4 실행계획 SQL 연산 (Hash Anti-Join)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.2 실행계획 sql 연산 (concatenation)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2.4 optimizer mode를 변경하는 힌트(choose)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.4 실행계획 SQL 연산 (Hash Anti-Join)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

What's hot (20)

PPTX
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3.9 실행계획 SQL 연산 (MERGE ANTI-JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Sql기초강좌2_SET AUTOTRACE_SQL교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
2.1 optimizer mode를 변경하는 힌트(rule)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Sql 조건연산자를 이용한 조건검색(1)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Sql 조건연산자를 이용한 조건검색(2)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.9 실행계획 SQL 연산 (MERGE ANTI-JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3.8 실행계획 SQL 연산 (MERGE JOIN, MERGE SEMI JOIN)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[오라클교육/SQL교육/IT교육/실무중심교육학원추천_탑크리에듀]#4.SQL초보에서 Schema Objectes까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#6.SQL초보에서 Schema Objects까지_구로IT학원/오라클교육/자바교육/국비지원/재직자환급교육/내일배움카드/사업주위탁
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Sql기초강좌2_SET AUTOTRACE_SQL교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2.1 optimizer mode를 변경하는 힌트(rule)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[구로IT학원추천/구로디지털단지IT학원/국비지원IT학원/재직자/구직자환급교육]#9.SQL초보에서 Schema Objects까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Sql 조건연산자를 이용한 조건검색(1)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Sql 조건연산자를 이용한 조건검색(2)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Ad

Viewers also liked (14)

PPTX
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
(JPA 엔티티 매니저)JPA 기초강좌, 엔티티 매니저. 엔티티 매니저팩토리
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#17.SQL초보에서 Schema Objects까지_오라클교육/SQL기초교육/구로IT학원/구로디짙털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스/ 구로오라클학원/ 구로자바학원/ 자바학원/ 오라클학원/ 구...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 /구로오라클학원/ 구로자바학원/ 구로디지털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(JPA 엔티티 매니저)JPA 기초강좌, 엔티티 매니저. 엔티티 매니저팩토리
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#17.SQL초보에서 Schema Objects까지_오라클교육/SQL기초교육/구로IT학원/구로디짙털단지역
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[오라클교육/닷넷교육/자바교육/SQL기초/스프링학원/국비지원학원/자마린교육]#16.SQL초보에서 Schema Objects까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#15.SQL초보에서 Schema Objects까지_국비지원IT학원/구로IT학원/실무교육학원/SQL교육/오라클교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#12.SQL초보에서 schema Objects까지(구로IT학원/IT실무교육학원/국비지원IT교육학원/오라클교육/자바교육/닷넷교육학원추천)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
오라클강의/자바강의/닷넷강의/자마린교육/아두이노교육학원추천_#13.SQL초보에서 Schema Objects까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
IT실무교육학원/자바학원/오라클학원/SQL기초학원추천_#11.SQL초보에서 Schema Objects까지
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Ad

Similar to #25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천 (20)

PDF
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
Seok-joon Yun
 
PPTX
(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
효율적인Sql작성방법 4주차
희동 강
 
PPTX
효율적인Sql작성방법 3주차
희동 강
 
PDF
Database 튜닝 교육 110124
한 경만
 
PDF
DB Index.pdf
Seokju Hong
 
PPT
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
Kenu, GwangNam Heo
 
PPTX
효율적인 SQL 작성방법 1주차
희동 강
 
PPTX
효율적인Sql작성방법 2주차
희동 강
 
PDF
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
엑셈
 
PDF
SQL Server Access Patterns
Sung wook Kang
 
PDF
[제3회 스포카콘] SQL 쿼리 최적화 맛보기
Jonghun Park
 
PDF
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
Seok-joon Yun
 
PPTX
개발자들이 흔히 실수하는 SQL 7가지
JungGeun Lee
 
PPTX
MySQL 실행계획
Wonjun Hwang
 
PDF
성능 좋은 SQL 작성법
Devgear
 
PDF
Oracle Index
Jongwon
 
PPTX
실무로 배우는 시스템 성능 최적화 Ch6
HyeonSeok Choi
 
PDF
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
엑셈
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
Seok-joon Yun
 
(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
효율적인Sql작성방법 4주차
희동 강
 
효율적인Sql작성방법 3주차
희동 강
 
Database 튜닝 교육 110124
한 경만
 
DB Index.pdf
Seokju Hong
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
Kenu, GwangNam Heo
 
효율적인 SQL 작성방법 1주차
희동 강
 
효율적인Sql작성방법 2주차
희동 강
 
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
엑셈
 
SQL Server Access Patterns
Sung wook Kang
 
[제3회 스포카콘] SQL 쿼리 최적화 맛보기
Jonghun Park
 
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
Seok-joon Yun
 
개발자들이 흔히 실수하는 SQL 7가지
JungGeun Lee
 
MySQL 실행계획
Wonjun Hwang
 
성능 좋은 SQL 작성법
Devgear
 
Oracle Index
Jongwon
 
실무로 배우는 시스템 성능 최적화 Ch6
HyeonSeok Choi
 
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
엑셈
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

PDF
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[IT교육/IT학원]Develope를 위한 IT실무교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PPTX
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[IT교육/IT학원]Develope를 위한 IT실무교육
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 

#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천

  • 1. SQL초보에서 Schema Objects까지 11. 인덱스(INDEX)  테이블의 칼럼에 대해 생성되는 객체로 별도의 영역(테이블스페이스)에 칼럼값들을 정렬한 후 생성한다. 데이터 검색 속도를 향상 시키기 위해 사용되며, 포인터를 이용하여 데이터를 램덤 액세스 한다.  한번 생성되면 오라클에 의해 내부적으로 자동 관리된다.  오라클에서 Create Index로 인덱스를 생성하면 B*Tree(balanced Tree) 인덱스가 생성되며 어떠 한 행을 접근하든지 액세스 타임이 동일한다.  WHERE절 or 조인절에 빈번히 출현되는 칼럼의 경우 대부분 인덱스가 필요하다.  칼럼값의 분포도가 10%~15% 인 경우 인덱스가 효율적이다.  삽입, 삭제가 빈번한 테이블에는 인덱스의 사용을 자제해야 한다. [형식] CREATE [UNIQUE] INDEX index_name ON table_name (Column|Expr[,Column|Expr]...); 11.1 단일/복합(결합) 인덱스(Single Column/Composite Index)
  • 2.  단일 인덱스는 하나의 칼럼으로 인덱스가 구성된 것이며, 복합 인덱스란 두개 이상의 칼럼으 로 인덱스가 생성된 경우이다. 1. EMP 테이블 ENAME 칼럼에 단일 인덱스를 생성하자. create index idx_emp_ename on emp(ename) -- 생성된 인덱스에 대한 확인은 USER_INDEXES 뷰에서 확인 가능하다. select table_name, index_name, visibility from user_indexes where table_name = 'EMP' TABLE_NAME INDEX_NAME VISIBILITY ------------------------------ ------------------------------ ---------- EMP IDX_EMP_ENAME VISIBLE EMP PK_EMP VISIBLE 2. EMP 테이블에서 ENAME, SAL로 복합 인덱스를 구성해 보자. create index idx_emp_ename_sal on emp(ename, sal) select table_name, index_name, visibility from user_indexes where table_name = 'EMP' TABLE_NAME INDEX_NAME VISIBILITY ------------------------------ ------------------------------ ---------- EMP IDX_EMP_ENAME_SAL VISIBLE EMP IDX_EMP_ENAME VISIBLE EMP PK_EMP VISIBLE 11.2 고유/비고유 인덱스(Unique/Non Unique Index)  고유 인덱스는 칼럼의 값들이 유일한 경우에 만들 수 있는 인덱스이고 비고유 인덱스는 칼럼 값에 중복된 값이 있는 경우 만드는 인덱스이다.
  • 3. 1. EMP 테이블에서 ENAME 칼럼에 대해 생성되어 있는 인덱스를 제거하시오. -- EMP 테이블의 ENAME 칼럼에 대해 생성되어 있는 인덱스는 아래 쿼리로 확인하자. select a.index_name from USER_IND_COLUMNS a, USER_INDEXES b where a.table_name = 'EMP' and a.index_name = b.index_name and a.column_name = 'ENAME' INDEX_NAME ------------------------------ IDX_EMP_ENAME IDX_EMP_ENAME_SAL Drop index IDX_EMP_ENAME; Drop index IDX_EMP_ENAME_SAL; 2. EMP 테이블에서 ENAME 칼럼에 대해 고유인덱스(Unique Index)를 생성 하시오. -- 만약 ename 칼럼에 중복되는 값이 있다면 아래 create index 구문은 오류가 발생한다. create unique index idx_emp_ename on emp(ename); 3. EMP 테이블에서 DEPT 칼럼에 대해 비고유인덱스(Non Unique Index)를 생성 하시오. create index idx_emp_deptno on emp(deptno) 11.3 Descending Index  인덱스 생성시 칼럼명 다음에 아무값도 안써주면 기본적으로 오름차순(ASCENDING) 이지만 DESC 라고 기술하면 내림차순(DESCENDING)으로 인덱스가 생성된다. 1. EMP 테이블에서 JOB은 오름차순, SAL 칼럼은 내림차순으로 인덱스를 생성 하시오. create index idx_emp_job_sal on emp(job, sal desc)
  • 4. 11.4 함수기반 인덱스(Function Based Index)  SQL 문장의 WHERE 절에 SQL함수(SQL Function)가 사용되는 경우 인덱스 컬럼에 변형이 생 겨 인덱스를 사용하지 못하게 되는데 이 경우 함수 기반 인덱스를 사용하면 된다.  칼럼에 대해 SQL함수 등을 적용하여 인덱스를 생성한다.  함수 기반 인덱스는 내부적으로 비트맵 인덱스로 생성된다. 1. 아래와 같은 쿼리를 보자. -- 아래 쿼리를 보면 EMP 테이블의 ENAME 칼럼은 인덱스가 생성되어 있다. select a.index_name from USER_IND_COLUMNS a, USER_INDEXES b where a.table_name = 'EMP' and a.index_name = b.index_name and a.column_name = 'ENAME' INDEX_NAME ------------------------------ IDX_EMP_ENAME -- 아래 쿼리는 인덱스 칼럼에 변형이 생긴 경우 이므로 인덱스를 이용하지 못하게 된다. 데이터 건수가 많은 경우 성능상문제가 될 수 있다. SQL> set autotrace on explain SQL> select ename, sal from emp 2 where lower(ename) = 'smith'; ENAME SAL ---------- ---------- SMITH 1000 Execution Plan -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  • 5. -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 9 | 3 (0)| 00:00:01 | |* 1 | TABLE ACCESS FULL| EMP | 1 | 9 | 3 (0)| 00:00:01 | -------------------------------------------------------------------------- -- lower(ename) 전체를 함수기반 인덱스로 생성하자. SQL> conn / as sysdba; SQL>alter session set QUERY_REWRITE_ENABLED = TRUE; SQL>alter session set QUERY_REWRITE_INTEGRITY=TRUSTED; SQL>grant query rewrite to scott; SQL>conn scott/tiger SQL> create index fidx_emp_ename on emp( lower(ename) ); --함수기반인덱스 생성 SQL> select ename, sal from emp 2 where lower(ename) = 'smith'; ENAME SAL ---------- ---------- SMITH 1000 Execution Plan -------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 16 | 2 ( | 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 16 | 2 ( |* 2 | INDEX RANGE SCAN | FIDX_EMP_ENAME | 1 | | 1 ( 11.5 인덱스 재구성 및 삭제 칼럼에 대해 생성된 인덱스에 변형(데이터 삽입, 삭제, 수정)이 자주 발생하는 경우 균형잡힌 트리 (Balanced Tree)의 모양이 아닌 트리가 한쪽으로 기울어 지는 현상이 생길 수 있다. 이러한 경우 인덱스를 재구성 또는 삭제 후 재생성 해야 한다.
  • 6. 1. EMP 테이블의 ENAME 칼럼에 대해 생성된 인덱스를 재구성 하세요. Alter index idx_emp_ename rebuild; 2. EMP 테이블의 ENAME 칼럼에 대해 생성된 인덱스를 삭제 하시요. Drop index idx_emp_ename; 11.6 인덱스 숨기기(Index Invisible) QUERY 작업을 할 때 가끔은 인덱스가 없다면 실행계획이 어떻게 될까, 고민 하면서 인덱스를 DROP 하고 실행 계획을 본 후 다시 INDEX를 생성하여 실행 계획을 본 적이 있을 것이다. 적은 량의 데이터를 가진 테이블이라면 문제가 아닐텐데 많은 양의 데이터가 있는 테이블 이라면 삭제 하고 생성하는데 부담이 있다. 이때 사용할 수 있는 것이 Oracle 11g에서 새로 소개된 INVISIBLE INDEX인데 인덱스를 invisible로 만들어서 옵티마이저에서 명시적으로 사용하지 말라고 지시를 할 수 있다. SQL> set autotrace on explain -- 인덱스가 생성되어 있으니 CBO에서 이용한다. SQL> SELECT count(*) FROM emp WHERE sal > 1500; COUNT(*) ---------- 10 Execution Plan -- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- - -- - - -- -- - -- -- -- - -- -- -- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- - -- -- -- -- - -- -- -- - -- -- -- | 0 | SELECT STATEMENT | | 1 | 4 | 1 (0)| 0 0:00:01 | | 1 | SORT AGGREGATE | | 1 | 4 | | | |* 2 | INDEX RANGE SCAN| IDX_EMP_SAL | 10 | 40 | 1 (0)| 00:00:01 |
  • 7. --------- -- - -- -- - -- -- -- - -- -- -- - -- -- - -- -- -- - -- -- - -- -- -- - -- -- - -- -- -- - -- -- - -- -- - - - - - -- SAL 칼럼에 생성되어 있는 인덱스를 숨기자. SQL> ALTER INDEX IDX_EMP_SAL invisible; 인덱스가 변경되었습니다. SQL> SELECT count(*) FROM emp WHERE sal > 1500; COUNT(*) ---------- 10 Execution Plan - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 0 | SELECT STATEMENT | | 1 | 4 | 3 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 4 | | | |* 2 | TABLE ACCESS FULL| EMP | 10 | 40 | 3 (0)| 00:00:01 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SQL> ALTER INDEX IDX_EMP_SAL visible; 인덱스가 변경되었습니다.