
InnoDB의 어댑티브 해시 인덱스는 InnoDB 스토리지 엔진에서 자주 사용하는 데이터에 대한 해시 인덱스로, 사용자가 수동으로 생성하는 인덱스가 아니라 InnoDB가 자동으로 생성하는 인덱스다. 일반적인 인덱스의 경우 B-Tree 자료구조를 사용하는데, B-Tree 인덱스에서 특정 값을 찾기 위해선 루트 노드부터 브랜치 노드, 마지막으로 리프 노드까지 탐색하는 의 과정을 거쳐야 한다. 이는 일반적인 경우 문제가 되지 않지만, 동시에 수 천건의 작업을 처리해야 한다면 문제가 될 것이다. 이를 해결하기 위해 InnoDB는 자주 읽히는 데이터 페이지를 해시 인덱스로 만들어 원하는 레코드가 저장된 데이터 페이지를 만에 즉시 찾아갈 수 있다.
해시 인덱스는 (인덱스 키 값, 데이터 페이지 주소) 쌍으로 관리되는데, 인덱스 키 값은 B-Tree의 고유 번호와 B-Tree 인덱스의 실제 키 값의 조합이다. 이때 데이터 페이지 주소는 버퍼 풀에 로딩된 페이지의 주소다. 어댑티브 해시 인덱스는 버퍼 풀에 로딩된 데이터 페이지에 대해서만 해싱을 수행하기 때문이다.
단, 어댑티브 해시 인덱스는 항상 효율적인 것은 아니다. 해시 인덱스는 단일 키 값 일치에 최적화 되어 있기 때문에 부분 일치나 패턴 매칭과 같은 LIKE 연산이나 여러 개의 테이블을 결합하는 JOIN 연산에 대한 쿼리가 많은 경우 비효율적일 수 있다. 또한 어댑티브 해시 인덱스가 활성화되면 InnoDB는 쿼리 실행 시 항상 해당 키 값이 해시 인덱스에 존재하는지 검색하는 과정을 추가로 필요하기 때문에, 비효율적인 경우 비활성화 하는 것이 좋다. 그리고, 테이블을 DROP 하거나 ALTER 하는 경우 관련된 모든 데이터 페이지의 내용을 어댑티브 해시 인덱스에서 제거해야 한다는 점도 있다.