티스토리 뷰

DB/Mysql

Mysql Index 인덱스란

길나미 2017. 1. 27. 21:54

RDBMS에서 Index란 무엇인가


아마 웹개발자라면 기술인터뷰시에 꼭 듣게 되는 질문중 하나다. 


책을 예를 들면, 보통 책을 처음 읽고자 할때 가장 먼저 보게 되는 페이지가 목차이다. 몇페이지부터 어디까지 무슨 주제로 내용이 있고 그 다음은 무엇이고 

책 전체내용을 빠르게 확인할 수 있고, 어떤 주제의 내용을 찾고자 할때는 이 목차를 활용할 수 있다. 


DB에서도 마찬가지로 테이블에서 데이터의 검색을 빠르게 할 수 있도록 특정컬럼을 Index로 지정하면 데이터삽입시 Index의 데이터가 별도로 생성되어 저장된다. 

쿼리 조회시 Index를 사용할 경우 그 속도가 빠른것을 확인 할 수 있고 이 것은 explain 실행계획으로 Index 사용 여부를 확인하면 된다. 


그럼 모든 컬럼을 Index로 지정하면 되지 않을까?

아니다. 언급했듯이 Index로 지정하면 데이터 삽입시 해당Index의 값을 별도의 데이터로 저장하기 때문에 성능이 떨어질 수 있다.

그래서 테이블 설계시 Index의 범위를 어떻게 할지 고민하는게 중요하다. 


복합Index란?

Index 생성시 컬럼 하나만 지정할수도 있고, 여러개를 지정할 수 도 있다. 

그럼 단순하게 복합입덱스에 필요한 컬럼을 다 넣어도 되지 않나라도 생각할수도 있지만 전~혀 그렇지 않다. 

복합Index의 경우 컬럼의 순서가 중요한데 쿼리조건에 인덱스컬럼 하나만 들어갈 경우에는 제일 앞에 있는 컬럼으로 조회할때만 인덱스를 탄다.


Index의 자료구조는?

그럼 인덱스로 검색하게 되는 자료구조는 어떤것일까.

관계형 디비에서는 가장 많이 쓰이는 자료구조가 B-Tree 방식이다. 

말그대로 트리구조형태로 인덱스를 찾아가는 방식이다. 

'DB > Mysql' 카테고리의 다른 글

mysql count 쿼리 성능  (3) 2018.08.07
댓글