как индексация B-дерева работает в MySQL - PullRequest
12 голосов
/ 02 марта 2010

Когда я создаю индекс для таблицы в mysql, я вижу, что index_type имеет тип BTREE. Теперь, хотя я понимаю о btree (s), я не совсем понимаю, как он хранит индекс и как база данных ищет записи, основанные на этом.

Я имею в виду, btree отлично подходит для баз данных для чтения и записи больших блоков данных, когда мы создаем индекс для типа столбца Primary key, я понимаю, что он создает дерево и разделяет значения для корня на основе типа значения корня.

Теперь, он хранит только первичный ключ ID под деревьями или все данные, связанные с этим первичным ключом?

После нахождения требуемого первичного идентификатора, как база данных извлекает запись?

1 Ответ

21 голосов
/ 02 марта 2010

База данных хранит значение, индексированное как ключ B-Tree, а указатель записи как значение B-Tree.

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

Что именно является «указателем записи», зависит от механизма хранения.

  • В MyISAM указатель записи является смещением к записи в файле MYI.

  • В InnoDB указатель записи является значением PRIMARY KEY.

В InnoDB сама таблица представляет собой B-Tree с PRIMARY KEY в качестве клавиши B-Tree. Это то, что называется «кластеризованный индекс» или «таблица, организованная по индексу». В этом случае все остальные поля сохраняются в виде значения B-Tree.

В MyISAM записи хранятся без какого-либо специального заказа. Это называется «куча хранилища».

...