MySQL - BTree AND Hash-индексы для одного столбца - PullRequest
0 голосов
/ 07 января 2019

Я пытался найти похожие вопросы, но не нашел ни одного, кроме вопросов, касающихся двух индексов для одного столбца (в целом).

Предположим, у нас есть таблица со столбцом COL. Таблица (и вся база данных) доступна только для чтения для клиентов (предположим, что она обновляется один раз / раз каждые длительные периоды времени и только бэкэнд-сервисом). Поэтому время вставки / обновления не имеет значения.

Для этого столбца есть часто используемые запросы, которые ищут строки, в которых значение COL находится в некотором диапазоне, и некоторые более часто используемые запросы, которые ищут строки, где COL сравнивается непосредственно со значением (проверка на равенство ).

Полезно ли, учитывая вышесказанное, держать индексы BTREE и HASH на COL? Будет ли оптимизатор использовать индекс BTREE для запросов диапазона и индекс HASH для запросов прямого сравнения? Изменится ли ответ, если COL имеет тип varchar(256)?

Спасибо!

1 Ответ

0 голосов
/ 07 января 2019

Я бы придерживался индекса B-Tree, потому что он все равно вам нужен. Возможно, при использовании хэш-индекса также может быть некоторый прирост производительности, но вы также будете занимать больше памяти.

Что еще более важно, хеш-индексы недоступны для самых распространенных механизмов хранения (InnoDB и MyISAM) - таблица 13.1 в документации .

...