일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 고전역학
- 뉴턴역학
- NIO
- Java
- JVM
- python
- 자바네트워크
- 리눅스
- 파이썬
- 유닉스
- flet
- 인프라
- android
- 자바암호
- kotlin
- 시스템
- Database
- oracle
- 역학
- write by GPT-4
- chatGPT's answer
- 자바
- 소프트웨어공학
- GIT
- Spring boot
- write by chatGPT
- lombok
- 웹 크롤링
- GPT-4's answer
- 코틀린
- Today
- Total
Akashic Records
Index가 옵티마이저에 의해 수행되는 경우 본문
Index 생성 기준
포함해야 할 컬럼
- Where 절에 자주 사용되는 컬럼
- 테이블 조인에 자주 사용되는 컬럼
- 분포도가 좋거나 유일한 컬럼
- Select 문장의 Min, Max 의 기준이 되거나 정렬에 자주 사용되는 컬럼
포함하지 않아야 할 컬럼
- 분포도가 좋지 않은 컬럼
- 테이블의 Row 수가 적은 테이블의 컬럼
- 자주 수정하는 컬럼
Index가 옵티마이저에 의해 수행되는 경우
1. Unique 인덱스의 Equal(=) 검색
select * from emp where empno = 7788
empno 컬럼에 생성된 Unique 인텍스(PK_EMP)를 통해서 Rowid를 얻은 후 랜덤 액세스를 통한 한 Row를 조회
2. Unique 인덱스의 범위(Range) 검색
select * from emp where empno >=, >, <=, < 7654
연산자 >,>=,<=,< 등을 인덱스 컬럼에 사용하는 경우에 주로 Index Range Scan이 일어남
3. 중복(Non-Unique) 인덱스의 범위 검색
Create Index emp_job on emp (job);
select * from emp where job like 'SALE%'
select * from emp where job ='SALESMAN'
emp 테이블의 job 컬럼에 중복을 허용하는 emp_job 인텍스를 생성한 경우에도 like, 같은 범위 연산자를 사용한 SQL 뿐만 아닐, = 비교하는 경우에도 Index Range Scan이 일어남
4. OR & IN 조건 - 결과의 결합
select * from emp where empno in (7654,7788)
select * from emp where empno = 7654 or empno = 7788
인텍스 컬럼에 OR, IN 연산자를 사용하면 각각의 조건 값을 나누어 실행한 후 결합이 일어나게 됨
UNION ALL을 사용해도 같음 실행 계획이 나옴
5. NOT BETWEEN 검색
select * from emp where empno not between 7654 and 7788
select * from emp where empno < 7654 or empno > 7788
where 절 조건에 NOT 연산을 하면 인덱스를 사용하지 않음
NOT BETWEEN A AND B 를 적용한 경우에는 A > or < B로 변환되어 인덱스를 사용할 수 있음
'오래된글 > DataBase' 카테고리의 다른 글
MongoDB, 설치와 간단 사용법 (0) | 2018.04.17 |
---|---|
MongoDB 제한자 (0) | 2018.04.17 |
Hashing (0) | 2018.04.15 |
CUBRID 주요기능 (0) | 2018.04.15 |
Chapter 6 PL SQL(Procedural Language/SQL) - 9 (0) | 2018.04.15 |