Страницы

Поиск по вопросам

понедельник, 2 декабря 2019 г.

B-TREE и HASH индексы

#sql #mysql


Привет. Интересует что такое B-TREE, HASH индексы? Как они влияют на ускорение выборки?
Каков их синтаксис?    


Ответы

Ответ 1



B-tree он же balanced tree индекс, это индекс сгруппированный по листьям сбалансированного дерева. Применяется для больших индексов, по сути это индекс индексов. Ну скажем индексы с величиной от 1 до 10 хранятся в одной ветке, от 11 до 20 в другой и т.д., когда приходит запрос на индекс с номером 35, идем к 3-й ветке и находим там 5-й элемент. В общем как то так. Подробнее здесь Hash индекс применяется для сравнения/построения индексов строчных и/или двоичных данных. Каждому значению индексируемого выражения сопоставляется значение определенной хэш функции отображающей исходное значение на целое число (иногда на строку). Подробнее здесь B-Tree индекс дает скорость выборки порядка log(N), hash дает линейную. В реальной жизни hash и B-Tree применяются совместно, то есть для вычисления значений B-Tree индекса все равно применяются хэши.

Ответ 2



Пусть у вас есть таблица goods ( id int primary key, catalog_id int, sales_from datetime, sales_till datetime ) Если у вас Engine InnoDb или MyISAM, то первичный индекс только BTREE, если тип таблицы MEMORY, то первичный индекс по умолчанию HASH, но можно назначить и BTREE. Для типа ndb - можно использовать как BTREE, так и HASH Если у вас частые запросы, типа: SELECT * FROM goods WHERE catalog_id = ... то имеет смысл сделать индекс HASH по полю catalog_id Если вы хотите найти товары, на которые в данный момент существуют скидки, т.е. условие: WHERE sales_from > NOW() AND sales_till < NOW() то тут однозначно надо использовать индекс BTREE

Комментариев нет:

Отправить комментарий