Как индексирование B-дерева работает в mysql
Когда я создаю индекс для таблицы в mysql, я вижу, что index_type имеет тип BTREE
. Теперь, хотя я понимаю о btree (s), я не понимаю, как он хранит индекс и как база данных ищет записи на основе этого.
Я имею в виду, что btree отлично подходит для баз данных для выполнения чтения и записи больших блоков данных,
когда мы создаем индекс для типа столбца Primary key
, я понимаю, что он создает дерево и разделяет значения для корня на основе типа значения корня.
Теперь, хранит ли он только первичный ключ ID
под деревьями или все данные, связанные с этим первичным ключом?
После поиска искомого первичного идентификатора, как база данных извлекает запись?
Ответы
Ответ 1
В базе данных хранится значение, индексированное как ключ B-Tree
, и указатель записи как значение B-Tree
.
Всякий раз, когда вы ищете запись, содержащую определенное значение индексированного столбца, механизм находит ключ, удерживающий это значение в B-Tree
, извлекает указатель на запись и извлекает запись.
Что такое "указатель записи", зависит от механизма хранения.
В InnoDB
, сама таблица является B-Tree
с PRIMARY KEY
как ключ B-Tree
. Это то, что называется "кластеризованным индексом" или "индексированной таблицей". В этом случае все остальные поля сохраняются как значение B-Tree
.
В MyISAM
записи сохраняются без специального заказа. Это называется "хранилище кучи".
Ответ 2
MySQL InnoDB фактически использует B + Tree, которые добавляют больше возможностей, чем B-Tree.
Например:
Только у узла листьев есть значения, позволяющие большему количеству ключей в одном и том же узле страницы уменьшить высоту дерева, что уменьшит количество операций ввода-вывода.
Добавьте двунаправленный указатель в каждом листовом узле, чтобы ускорить поиск диапазона
B-Tree
![B-Tree]()
B +
Tree![B+Tree]()