mysql은 db 엔진의 인터페이스(storage engine interface)를 갖고 있고, 이를 구현한 구현체중 하나가 inno db이다.
db가 데이터를 저장하는 단위를 보통 레코드(row)라고 하고, 디스크에 페이지 단위로 모여서 저장된다(페이지 단위로 io가 일어난다).
row store는 레코드를 페이지에 저장을 하고, column store는 필드끼리 모여서 페이지에 저장된다.
데이터베이스 페이지(디스크 저장 단위인 블록이라고 생각하면 편하다)의 최소 크기는 4KB이다.
보통 인덱스는 B+ tree로 저장되고, B+ tree의 node하나는 page 하나를 통째로 사용한다.
인덱스가 저장되는 페이지를 인덱스 페이지, 데이터가 저장되는 페이지를 데이터 페이지라고 한다.
B+ tree에서 데이터를 가리키는 포인터는 데이터페이지를 가리키는데, 이는 IO를 페이지단위로 처리하는게 빠르기 때문이다.
B+ tree와 B tree의 차이점은, B+ tree는 리프 노드에만 데이터페이지의 포인터를 갖고 있고, B tree는 모든 노드에서 데이터페이지의 포인터를 갖고 있기 때문에, B+ tree가 범위 검색에 훨씬 좋아서 DB에서는 B+ tree를 인덱스 자료구조로 사용함