1. Clustered Index
InnoDB에서는 clustered index라는 인덱스를 한 테이블당 한개 작성한다.
이것은 B+ Tree인덱스이다.
인덱스의 Leaf에 실레코드가 직접저장된다.
clustered index는 primary키를 중심으로 인덱스를 작성하고 있다.
만약 사용자가 테이블에 primary 키 또는 unique키를 정의하지 않았을 경우 , InnoDB자신이
내부에 자동적으로 primary키 대신의 것을 생성하고 그것에 따라서 인덱스를 만든다.
InnoDB가 자동적으로 할당한 것은 사용자는 볼 수 없다.
InnoDB에서는 이 clustered index키를 중심으로 행 lock를 동작시킨다.
따라서 만약에 사용자가 primary 키 또는 unique 키를 테이블에 정의해놓지 않으면 행 lock은 동작하지 않으므로 주의 해야한다.
2. Secondary Index
Secondary Index는 Primary 키이외의 인덱스에 대해서 작성되는 것이다.
인덱스 leaf에 primary 키의 값과 non-primary키가 셋트로 기록된다.
primary 키이외의 키가 query에서 사용되었을 경우 이 secondary index가 탐색되어 판명된 primary 키를 중심으로 레코드를 읽어 냄으로 2단계 처리가 이루어짐으로 검색의 속도가 떨어진다.
secondary index의 소트 알고리즘도 B+ tree이다.
또 한개의 non-unique인덱스당 한개가 작성된다.
3. Adaptive Hash Index
테이블이 거의 메모리에서 처리가능할 때 InnoDB는 자동적으로 이 테이블의 hash index를 메모리(buffer pool)안에 작성한다. 이 인덱스를 사용하면 키 값으로 부터 레코드의 기술 위치를 알 수 있다. 이것이 Adaptive Hash Index이다.
모든것이 index화되어서 buffer pool에서 넣어지는 것이 아니라 액세스 빈도가 많은 것이 있으면 그것에 맞추어서 작성된다.
레코드 검색시 B+ tree 인덱스를 검색하기 전에 Adaptive Hash Index를 조사한다.
만약 Adaptive Hash Index에 레코드의 기술위치정보가 있으면 그 밖의 B+ Tree 인덱스 검색은 건너뛰고 직접 레코드를 읽어들이게 된다.