개념
옵티마이저 : 검색을 효율적으로 해주는 DB 내장기능
실행계획 : 효율적인 검색 계획 ex. 1번부터 찾을까?, 마지막부터 찾을까?
explain 명령어 : 옵티마이저가 결정한 실행 계획을 볼 수 있음 (테이블 형태로)
위의 사진에서
type
부분이 const로 되어있는걸 확인할 수 있는데여러 수 많은
type
들이있지만 대표적으로 const
, ref
, range
등등 이있다.const,ref,range의 개념은 다음과 같다.
const: PK,FK,UNIQUE중에서 인덱스를 찾아서 검색해볼 예정이라는 뜻.
ref: 내가 생성한 인덱스 중에서 검색해볼 예정이라는 뜻.
range: 크다 "<" 작다 ">" 등 범위에서 검색해볼 예정이라는 뜻.
참고로, 위의 이미지속 조회하고있는 이 데이터의
type
은 const인데, const type은 자동으로 DB가 index를 생성해줬다고 보면 된다.위의 이미지에서
possible_key
부분이 idx_title로 설정되어있는데,``` create index idx_title on board(title) ; ```
위의 명령어를 입력해서 인덱스를 임의로 생성해준 것이다.
보통 실무에서 인덱스 이름을
idx_이름
이런식으로 해준다.참고로 위의 명령어는 board 테이블의 title을 인덱스로 설정하고 인덱스 이름은
idx_title
로 한다는걸 의미한다.추가로 위의 이미지들에는 안나와있지만
cardinality
속성도 있는데 cardinality
의 속성 값은 숫자로 되어있다. 이 값이 클수록 유니크한걸로 생각하면된다.
유니크 = 검색한 값을 더 빨리 가져온다고 생각하자.
mysql index 실습 쿼리문
- 데이터 전체 갯수 확인 ``` select count (*) from board ; ``` - 쿼리 검색 속도 비교 934s나옴 ``` select from board where title ='0.7711975563049294' ; ``` - 0.001s 나옴 ``` select from board where number = 694 ; ``` - 왜 차이가 나는걸까? - 옵티마이저 실행계획 확인 ``` explain select _ from board where title ='0.7711975563049294' ; explain select _ from board where number = 694 ; ``` - 인데스 확인 ``` show index from board ; ``` - 인덱스 생성 ``` create index idx_title on board(title) ; ``` - 인데스 확인을 다시 해보면 두줄의 인덱스가 생성되어있다! ``` show index from board ; ``` - 왜 차이가 나는걸까? - 옵티마이저 실행계획 확인 ``` explain select * from board where title ='0.7711975563049294' ; ``` - 인덱싱된 컬럼으로 재쿼리 후, 성능 비교, 0.002s 걸림 ``` select * from board where title ='0.7711975563049294' ; ```
댓글