2010-03-02 4 views
10

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

Я имею в виду, ВТКЕЙ отлично подходит для баз данных, чтобы выполнять операции чтения и запись больших блоков данных, при создании индекса для типа столбца Primary key, что я понимаю, оно создает дерево и расщепляющие значения для корня основанный на типе значения корня.

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

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

ответ

20

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

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

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

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

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

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

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

+0

Спасибо за объяснение. В моей базе данных у меня есть несколько таблиц с MyISAM, а некоторые - как InnoDB с индексами на них. Будет ли это в любом случае влиять на соединения и запросы, которые я пишу, - это разные типы? – JPro

+1

@JPro: база данных обрабатывает основные данные индексации автоматически. Синтаксис 'JOIN' одинаковый для таблиц' MyISAM' и 'InnoDB'. – Quassnoi

+0

Я имею в виду, имеет ли значение вообще создавать все таблицы с одинаковым механизмом хранения или нет? – JPro