index - 검색

index - 검색

카테고리
MySQL
날짜
작성자
JeongjungsikJeongjungsik
태그

개념

 
옵티마이저 : 검색을 효율적으로 해주는 DB 내장기능
실행계획 : 효율적인 검색 계획 ex. 1번부터 찾을까?, 마지막부터 찾을까?
explain 명령어 : 옵티마이저가 결정한 실행 계획을 볼 수 있음 (테이블 형태로)
 
 
notion image
 
위의 사진에서 type 부분이 const로 되어있는걸 확인할 수 있는데
여러 수 많은 type들이있지만 대표적으로 const, ref, range 등등 이있다.
 
const,ref,range의 개념은 다음과 같다.
 
const: PK,FK,UNIQUE중에서 인덱스를 찾아서 검색해볼 예정이라는 뜻.
ref: 내가 생성한 인덱스 중에서 검색해볼 예정이라는 뜻.
range: 크다 "<" 작다 ">" 등 범위에서 검색해볼 예정이라는 뜻.
💡
참고로, 위의 이미지속 조회하고있는 이 데이터의 type은 const인데, const type은 자동으로 DB가 index를 생성해줬다고 보면 된다.
 
notion image
 
위의 이미지에서 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' ; ```

댓글

guest