인덱스 키 값의 크기가 조회에 영향을 미치는 요소
2023. 9. 5. 11:59ㆍDB
728x90
인덱스의 키 값의 크기가 조회에 어떤 영향을 끼칠 수 있을까??
이를 알기 위해서는 아래와 같은 배경지식이 필요하다.
- 디스크에 데이터를 저장하는 가장 기본 단위를 페이지라고 한다. 그리고, 페이지는 디스크와 메모리에 데이터를 읽고 쓰는 작업에 최소 단위가 된다.
- 한 페이지를 읽을 때마다 한 번의 디스크 I/O가 발생한다.
- 3 페이지를 읽어야된다면, 3번의 디스크 I/O가 발생!
- 같은 쿼리라면, 적게 읽을 수록 효율적
- 3 페이지를 읽어야된다면, 3번의 디스크 I/O가 발생!
💡 그렇다면, 페이지에는 데이터들이 어떻게 저장되는 걸까??
테이블에 데이터를 삽입하거나 업데이트하면 InnoDB는 데이터를 페이지 단위로 관리하며,
데이터들은 크기가 MySQL에서 정의한 페이지 크기까지 저장되었다가 만약 그 용량을 초과하면 새로운 페이지를 만들어 거기에 저장한다.
중간 결론 : 페이지의 크기는 정해져있으므로 해당 페이지에 담을 수 있는 개별 데이터들은 크기가 작을 수록 좋다.
실제로 계산해보자
MySQL 5.7 버전 부터 InnoDB 스토리지 엔진의 페이지 크기를 innodb_page_size 시스템 변수를 이용해 4KB ~ 64KB 사이의 값을 선택할 수 있지만 기본값은 16KB이다.
인덱스의 키 크기를 16 바이트라고 하고, 자식 노드 주소 크기를 12 바이트라 하자.
그렇다면, 하나의 인덱스 페이지에는 몇 개의 키를 저장할 수 있을까?
계산해보면, 16 * 1024/(16 + 12) = 585개를 저장할 수 있다.
만약, 인덱스 키 값이 커지면, 어떻게 될까?
익덱스 키 값이 2배가 커지면, 한 페이지에 인덱스 키를 16 * 1024/(32+12) = 372개를 저장할 수 있다.
이를 통해, 인덱스의 키 값의 크기가 커지면 한 페이지 담을 수 있는 키의 갯수가 줄어든다는 것을 알 수 있었다.
이는 곧 SELECT 쿼리가 느려질 가능성이 커지는 것(디스크로부터 읽어야하는 페이지가 늘어남)이다.
결론은 인덱스 키 값의 크기 또한 가능하면 작게 만드는 것이 좋다!
728x90
'DB' 카테고리의 다른 글
한 테이블에 클러스터형 인덱스와 보조 인덱스가 동시에 있다면 어떤 구조일까? (0) | 2023.09.07 |
---|---|
MySQL이 인덱스를 이용하는 방법 (0) | 2023.09.07 |
H2 데이터베이스의 Connection mode (0) | 2023.07.04 |
테이블 설계의 기본 정규화 (1) | 2023.06.27 |
mysql - 인덱스에 대하여 (0) | 2022.07.05 |