티스토리 뷰
728x90
반응형
select문 앞에 explain을 붙이면 인덱스를 사용하는지 안하는지 확인할수있으며
type에 ALL이 있다면 FullScan 인덱스를 타고있지않다는 표시
경우의수가 적을경우에는 인덱스를 타지않습니다
ex) select * from Table_Name where No>0 and A>0; // 인덱스 안탐
인덱스는 하나만 탑니다
오라클의 경우에는 인덱스를 여러개 걸어주면 그것을 다 타지만 MySQL에선느 인덱스를 하나만 탑니다
결합인덱스 사용법.
특정 테이블에서 동일한 쿼리문을 주로 사용하고 그 쿼리문이 아래와 같을 경우...
select * from Table_Name where A='a' and B='b' and C='c';
이경우 이 세개의 인덱스를 전부 타기 위해서는 결합인덱스를 걸어줘야 됩니다.
ALTER TABLE Table_Name ADD INDEX (A,B,C);
이렇게 인덱스를 줄 경우에 세개의 필드를 정렬해서 하나의 인덱스를 생성하기 때문에 해당인덱스를 탈 수 있습니다.
order by 에서 사용하는 인덱스.
select * from Table_Name order by A; -> 이경우에 A인덱스를 탑니다.
select * from Table_Name where B='b' order by A; -> 이경우 B인덱스만 탑니다.
이경우에 두개의 인덱스를 다 타게 하려면 결합인덱스로 (A,B)를 생성시키고, A의 조건을 where 문에 지정을 해줍니다.
728x90
반응형
'DataBase > MySQL' 카테고리의 다른 글
[MySQL] varchar 타입 order by 하는법 (0) | 2019.05.22 |
---|---|
[MySQL] 대용량 테이블 스키마 변경하기 (0) | 2019.05.17 |
[MySQL] explain (0) | 2019.05.15 |
[MySQL]union (0) | 2019.05.15 |
[MySQL] 잘못된 쿼리 습관 (0) | 2019.05.14 |
댓글