13.1.18.1 Файлы, создаваемые командой CREATE TABLE
MySQL представляет каждую таблицу файлом формата (определения) таблицы в каталоге базы данных. Системный движок хранения таблицы может создавать и другие файлы.
Для таблицы, созданной в файловом пространстве таблиц или общем пространстве таблиц, данные таблицы и связанные индексы хранятся в каталоге базы данных. Когда таблица создается в системном пространстве таблиц, данные таблицы и индексы хранятся в файлах, представляющих системное пространство таблиц. Параметр innodb_file_per_table управляет тем, создаются ли таблицы в файловом пространстве таблиц или в системном пространстве таблиц, по умолчанию. Параметр TABLESPACE может использоваться для размещения таблицы в файловом пространстве таблиц, общем пространстве таблиц или системном пространстве таблиц, независимо от настройки innodb_file_per_table.
Для таблиц MyISAM движок хранения создаёт файлы данных и индексов. Таким образом, для каждой таблицы MyISAM tbl_name, существует три файла на диске.
| Файл | Назначение |
|---|---|
| Файл формата (определения) таблицы |
| Файл данных |
| Файл индексов |
Глава 15, Альтернативные движки хранения данных описывает, какие файлы создаёт каждый движок хранения для представления таблиц. Если имя таблицы содержит специальные символы, имена файлов таблицы содержат закодированные версии этих символов, как описано в Разделе 9.2.4, «Сопоставление идентификаторов с именами файлов».
Ограничения, накладываемые структурой файла .frm
Как описано ранее, каждая таблица имеет файл .frm, содержащий определение таблицы. Сервер использует следующее выражение для проверки некоторых данных таблицы, хранящихся в файле, относительно верхнего предела 64 КБ:
if (info_length+(ulong) create_fields.elements*FCOMP+288+
n_length+int_length+com_length > 65535L || int_count > 255)
Часть информации, хранящейся в файле .frm, которая проверяется по выражению, не может превышать 64 КБ, поэтому если определение таблицы достигает этого размера, больше столбцов добавить нельзя.
Релевантными факторами в выражении являются:
info_length- необходимое пространство для “экранов”. Это связано с наследием MySQL Unireg.create_fields.elements- количество столбцов.FCOMP- равно 17.n_length- общая длина всех имён столбцов, включая один байт на имя в качестве разделителя.int_length- связано со списком значений дляENUMиSETстолбцов. В этом контексте “int” не означает “целое число”. Это означает “интервал”, термин, который относится коллективно кENUMиSETстолбцам.com_length- общая длина комментариев к столбцам.
Описанное выше выражение имеет несколько последствий для допустимых определений таблиц:
Использование длинных имён столбцов может уменьшить максимальное количество столбцов, как и включение
ENUMилиSETстолбцов, или использование комментариев к столбцам.-
Таблица может иметь не более 255 уникальных определений
ENUMиSET. Столбцы с одинаковыми списками элементов считаются одинаковыми с точки зрения этого ограничения. Например, если таблица содержит эти два столбца, они учитываются как один (а не два) с точки зрения этого ограничения, потому что определения идентичны:e1 ENUM('a','b','c') e2 ENUM('a','b','c') Сумма длин имён элементов в уникальных определениях
ENUMиSETучитывается в пределе 64 КБ, поэтому, хотя теоретический предел количества элементов в данном столбцеENUMсоставляет 65 535, практический предел меньше 3000.
© 2025 Oracle
Licensed under the GPLv2 License.