Adaptive Hash Index, AHI
Сцены
Например, каждый раз, когда мы запрашиваем первичный ключ соответствующей записи из вспомогательного индекса, а затем используем первичный ключ в качестве ключа поиска для поиска B+дерева первичного ключа, чтобы найти запись.
Когда таких запросов будет больше, механизм innoDB будет оптимизировать.
Поддерживать отношение сопоставления хэшей между значением ключа индекса (или префиксом значения ключа) всех записей на конечной странице индекса и местоположением конечной страницы индекса,
В соответствии со значением ключа индекса (префиксом) он может быстро найти смещение конечной страницы, которое удовлетворяет условной записи, что снижает стоимость пути поиска дерева B+ и оптимизирует путь дерева B+ от корневой страницы до Листовая страница должна быть оптимизирована как быстрый запрос для хэш-индекса.
Адаптивный хэш-индекс оптимизирован для пути поиска дерева B+, поэтому все операции, связанные с путем поиска, можно оптимизировать с помощью этого хэш-индекса.
У AHI также есть некоторые требования, согласно которым шаблоны последовательного доступа для этой страницы должны быть одинаковыми. Например, для совместной индексной страницы, такой как (a,b), ее шаблон доступа может быть следующим:
- where a=xxx
- where a =xxx and b=xxx
Один и тот же режим доступа означает, что условия запроса одинаковы.Если два вышеуказанных запроса выполняются попеременно, механизм хранения InnoDB не создаст AHI для страницы. Разумеется, режим доступа один и тот же, и он должен достигать определенного числа, например, через этот режим к странице обращались N раз, где N = запись на странице * 1/16.
По некоторой статистике, после включения AHI скорость чтения и записи может быть увеличена в 2 раза, а производительность операций подключения вспомогательных индексов может быть увеличена в 5 раз.
Идея дизайна AHI заключается в самооптимизации базы данных, которая не требует, чтобы DBA вручную настраивал базу данных, и может только выбрать, открыть или закрыть ее. Мы можем просмотреть использование innodb AHI с помощью следующей команды.
mysql> show engine innodb status