7.5.11 Структуры таблиц и индексов
В MySQL информация словаря данных таблиц хранится в файлах `.frm',
расположенных в каталогах баз данных. Но для каждой таблицы InnoDB имеются
также свои записи во внутренних словарях данных InnoDB в табличной
области. Когда MySQL удаляет таблицу или базу данных, необходимо удалить
как файлы `.frm', так и соответствующие записи в словаре данных InnoDB.
Именно поэтому нельзя перемещать таблицы InnoDB между базами данных путем
простого перемещения файлов `.frm'. По этой же причине DROP DATABASE
не
работал для таблиц InnoDB в MySQL версий <= 3.23.43.
Для всех таблиц InnoDB есть специальный индекс, в котором хранятся данные
строк - он называется кластеризованным индексом. Если в таблице определить
PRIMARY KEY
, то индекс первичного ключа будет кластеризированным индексом.
Если первичный ключ для таблицы не определен, то InnoDB самостоятельно
создаст кластеризированный индекс; строки в этом индексе будут упорядочены
по идентификатору строки, который InnoDB назначил строкам этой таблицы.
Идентификатор строки представляет собой 6-байтовое поле, значение которого
постоянно увеличивается при вставке новых строк. Таким образом, сортировка
по идентификатору строки фактически представляет собой сортировку по
последовательности вставки.
Доступ к строке через кластеризированный индекс осуществляется достаточно
быстро, поскольку данные строки находятся на той же странице, к которой
приводит поиск по индексу. Во многих базах данных информация и индексная
запись традиционно хранятся на разных страницах. При больших размерах
таблицы архитектура кластеризированных индексов часто позволяет сократить
количество дисковых операций ввода/вывода по сравнению с традиционными
решениями.
Записи в некластеризированных индексах (мы называем их также вторичными
индексами), в InnoDB содержат значение первичного ключа для строки. InnoDB
использует этот значение первичного ключа для поиска строки в
кластеризированном индексе. Следует учитывать, что если первичный ключ
достаточно велик, вторичные индексы будут занимать больше места.
Главы