인덱스 키 값의 크기가 조회에 영향을 미치는 요소

2023. 9. 5. 11:59DB

728x90

인덱스의 키 값의 크기가 조회에 어떤 영향을 끼칠 수 있을까??

이를 알기 위해서는 아래와 같은 배경지식이 필요하다.

 

  • 디스크에 데이터를 저장하는 가장 기본 단위를 페이지라고 한다. 그리고, 페이지는 디스크와 메모리에 데이터를 읽고 쓰는 작업에 최소 단위가 된다.
  • 한 페이지를 읽을 때마다 한 번의 디스크 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