MySQL - BTree AND Hash-индексы для одного столбца
Я пытался найти похожие вопросы, но не нашел ни одного, кроме вопросов, касающихся двух индексов для одного столбца (в общем).
Предположим, у нас есть таблица с колонкой COL
, Таблица (и вся база данных) доступна только для чтения для клиентов (предположим, что она обновляется один раз / раз каждые длительные периоды времени и только бэкэнд-сервисом). Следовательно, время вставки / обновления не имеет значения.
Для этого столбца часто используются запросы, которые ищут строки, в которых COL
значение находится в некотором диапазоне, а некоторые наиболее часто используемые запросы, которые ищут строки, где COL
сравнивается непосредственно со значением (проверка на равенство).
Выгодно ли, учитывая вышесказанное, проводить как BTREE
а также HASH
индекс на COL
? Будет ли оптимизатор использовать BTREE
индекс для запросов диапазона и HASH
индекс для запросов прямого сравнения? Изменится ли ответ, если COL
имеет тип varchar(256)
?
Спасибо!
1 ответ
Я бы придерживался индекса B-Tree, потому что он вам все равно нужен. Возможно, при использовании хеш-индекса также может быть некоторый прирост производительности, но вы также будете занимать больше памяти.
Более того, хеш-индексы недоступны для самых распространенных механизмов хранения (InnoDB и MyISAM) - Таблица 13.1 в документации.