В MySQL информация словаря данных
таблиц хранится в файлах
.frm, расположенных в
каталогах баз данных. Но для каждой
таблицы InnoDB имеются также свои
записи во внутренних словарях
данных InnoDB в табличной области.
Когда MySQL удаляет таблицу или базу
данных, необходимо удалить как
файлы .frm, так и
соответствующие записи в словаре
данных InnoDB. Именно поэтому нельзя
перемещать таблицы InnoDB между
базами данных путем простого
перемещения файлов .frm.
По этой же причине DROP
DATABASE не работал для таблиц
InnoDB в MySQL версий <= 3.23.43.
Для всех таблиц InnoDB есть
специальный индекс, в котором
хранятся данные строк - он
называется кластеризованным
индексом. Если в таблице
определить PRIMARY KEY, то
индекс первичного ключа будет
кластеризированным индексом.
Если первичный ключ для таблицы не определен, то InnoDB самостоятельно создаст кластеризированный индекс; строки в этом индексе будут упорядочены по идентификатору строки, который InnoDB назначил строкам этой таблицы. Идентификатор строки представляет собой 6-байтовое поле, значение которого постоянно увеличивается при вставке новых строк. Таким образом, сортировка по идентификатору строки фактически представляет собой сортировку по последовательности вставки.
Доступ к строке через кластеризированный индекс осуществляется достаточно быстро, поскольку данные строки находятся на той же странице, к которой приводит поиск по индексу. Во многих базах данных информация и индексная запись традиционно хранятся на разных страницах. При больших размерах таблицы архитектура кластеризированных индексов часто позволяет сократить количество дисковых операций ввода/вывода по сравнению с традиционными решениями.
Записи в некластеризированных индексах (мы называем их также вторичными индексами), в InnoDB содержат значение первичного ключа для строки. InnoDB использует этот значение первичного ключа для поиска строки в кластеризированном индексе. Следует учитывать, что если первичный ключ достаточно велик, вторичные индексы будут занимать больше места.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
