[아래는 DB2 환경입니다.]
제가 알기로는 PK를 잡으면 그것이 기본 인덱스로 잡힌다고
들었습니다.
scode(char4)+ daytime (varchar30)
로 pk를 만들었습니다.
[실행1]
select * from tablename where socde='12' and
daytime='123123123'
______________expalin plan 이렇게 나옵니다.
1 Index Scan (No Table Access) NPA.NEW_PSSV_PK_2004 Index
358.14
2 Sort 358.97
3 Row Identifier Scan (RID) 358.98
4 Fetch Table Data NPA.NEW_PDA_SERVSTAT_2004 Table 2889.53
5 Data Operation Complete 2889.53
[실행2]
select * from new_pda_servstat_2004 where scode='0401'
____________explain plan
1 Table Access Full NPA.NEW_PDA_SERVSTAT_2004 Table
14032.64
2 Data Operation Complete 14032.64
[실행3]
select * from new_pda_servstat_2004 where scode='0401' and
daytime>='20041205151211956286'
________explain plan
1 Table Access Full NPA.NEW_PDA_SERVSTAT_2004 Table
14290.52
2 Data Operation Complete 14290.52
[실행4]
select * from new_pda_servstat_2004 where scode>='0401'
________explain plan
1 Table Access Full NPA.NEW_PDA_SERVSTAT_2004 Table
14032.64
2 Data Operation Complete 14032.64
질문1]
scode와 daytime두개로 되어있으니 scode만 입력된 경우에는
scode만이라도 인덱스를
타는게 정상 아닌가요?
질문2]
왜 실행3,4 처럼 daytime, scode이 '='아 아닌 경우는
인덱스를 타지 못하나요?
추가]
int 형으로 pk가 a+b인걸 만들었습니다
해봤더니 a 만줘도, a+b로 주어도, a에 부등호를 주어도,
둘다부등호를 주어도 인덱스를 찾더라구요
만약 내부적으로 char가 변형이 일어난다면
인덱스를 사용할수 있는 방법은 없나요?
|