28.3.38 Таблица INFORMATION_SCHEMA TABLES
Таблица TABLES предоставляет информацию о таблицах в базах данных.
Столбцы в таблице TABLES, которые представляют статистику таблиц, содержат кэшированные значения. Переменная сервера information_schema_stats_expiry определяет период времени, после которого кэшированные статистические данные таблиц истекают. Значение по умолчанию составляет 86400 секунд (24 часа). Если кэшированных статистических данных нет или они истекли, статистика извлекается из хранилищ движков баз данных при запросе к столбцам со статистикой таблиц. Для обновления кэшированных значений в любое время для заданной таблицы используйте ANALYZE TABLE. Чтобы всегда получать последнюю статистику непосредственно от движков баз данных, установите переменную information_schema_stats_expiry в значение 0. Дополнительную информацию см. в Разделе 10.2.3, «Оптимизация запросов INFORMATION_SCHEMA».
Если переменная сервера innodb_read_only включена, ANALYZE
TABLE может завершиться неудачей, так как он не может обновить таблицы статистики в словаре данных, которые используют InnoDB. Для операций ANALYZE
TABLE, которые обновляют распределение ключей, может произойти сбой, даже если операция обновляет саму таблицу (например, если это таблица MyISAM). Чтобы получить обновлённую статистику распределения, установите information_schema_stats_expiry=0.
Таблица TABLES содержит следующие столбцы:
-
TABLE_CATALOGНазвание каталога, к которому принадлежит таблица. Это значение всегда
def. -
TABLE_SCHEMAНазвание схемы (базы данных), к которой принадлежит таблица.
-
TABLE_NAMEНазвание таблицы.
-
TABLE_TYPEBASE TABLEдля таблицы,VIEWдля представления илиSYSTEM VIEWдля таблицыINFORMATION_SCHEMA.Таблица
TABLESне содержит информацию о таблицахTEMPORARY. -
ENGINEДвижок хранения таблицы. См. главу 17, Движок InnoDB и главу 18, Альтернативные движки хранения.
Для разграниченных таблиц,
ENGINEотображает имя движка хранения, используемого всеми разделами. -
VERSIONЭтот столбец не используется. В связи с удалением файлов
.frmв MySQL 8.0, этот столбец теперь отображает жестко заданное значение10, которое является последней версией файла.frm, используемой в MySQL 5.7. -
ROW_FORMATФормат хранения строк (
Fixed,Dynamic,Compressed,Redundant,Compact). Для таблицMyISAM,Dynamicсоответствует тому, что сообщает myisamchk -dvv какPacked. -
TABLE_ROWSКоличество строк. Некоторые движки хранения, такие как
MyISAM, хранят точное значение. Для других движков хранения, таких какInnoDB, это значение является приблизительным и может отличаться от фактического значения на 40% - 50%. В таких случаях используйтеSELECT COUNT(*)для получения точного подсчёта.TABLE_ROWSявляетсяNULLдля таблицINFORMATION_SCHEMA.Для таблиц
InnoDB, количество строк является лишь грубой оценкой, используемой для оптимизации SQL. (Это также верно, если таблицаInnoDBразделена). -
AVG_ROW_LENGTHСредняя длина строки.
-
DATA_LENGTHДля
MyISAM,DATA_LENGTHпредставляет собой длину файла данных в байтах.Для
InnoDB,DATA_LENGTHпредставляет собой приблизительный объем выделенной памяти для кластеризованного индекса в байтах. Точнее, это размер кластеризованного индекса в страницах, умноженный на размер страницыInnoDB.См. примечания в конце этого раздела для получения информации об других движках хранения.
-
MAX_DATA_LENGTHДля
MyISAM,MAX_DATA_LENGTHпредставляет собой максимальную длину файла данных. Это общее количество байтов данных, которые могут быть сохранены в таблице, с учётом размера указателя данных.Не используется для
InnoDB.См. примечания в конце этого раздела для получения информации об других движках хранения.
-
INDEX_LENGTHДля
MyISAM,INDEX_LENGTHпредставляет собой длину файла индекса в байтах.Для
InnoDB,INDEX_LENGTHпредставляет собой приблизительный объем выделенной памяти для некластеризованных индексов в байтах. Точнее, это сумма размеров некластеризованных индексов в страницах, умноженная на размер страницыInnoDB.См. примечания в конце этого раздела для получения информации об других движках хранения.
-
DATA_FREEКоличество выделенных, но неиспользуемых байт.
Таблицы
InnoDBотображают свободное место табличного пространства, к которому принадлежит таблица. Для таблицы, расположенной в общем табличном пространстве, это свободное место общего табличного пространства. Если вы используете несколько табличных пространств, и у таблицы есть собственное табличное пространство, свободное место относится только к этой таблице. Свободное место означает количество байтов в полностью свободных экстентах минус безопасность. Даже если свободное место отображается как 0, возможно вставка строк, пока не потребуется выделение новых экстентов.Для NDB Cluster,
DATA_FREEпоказывает выделенное на диске, но не используемое место для таблицы данных на диске или фрагмента на диске. (Использование ресурсов памяти отображается столбцомDATA_LENGTH).Для разграниченных таблиц это значение является лишь оценкой и может быть не абсолютно точным. Более точный способ получить эту информацию в таких случаях — запросить таблицу
INFORMATION_SCHEMAPARTITIONS, как показано в данном примере:SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 'mytable';Дополнительную информацию см. в разделе 28.3.21, «Таблица INFORMATION_SCHEMA PARTITIONS».
-
AUTO_INCREMENTСледующее значение
AUTO_INCREMENT. -
CREATE_TIMEДата создания таблицы.
-
UPDATE_TIMEДата последнего обновления таблицы. Для некоторых движков хранения это значение
NULL. Даже в режиме с каждой таблицейInnoDBв отдельном файле.ibdзапись в файл данных может быть отложена, поэтому время изменения файла отличается от времени последней вставки, обновления или удаления. ДляMyISAMиспользуется отметка времени файла данных; однако, в Windows отметка времени не обновляется при обновлениях, поэтому значение неточно.UPDATE_TIMEотображает отметку времени последнегоUPDATE,INSERTилиDELETE, выполненного на таблицахInnoDB, которые не разделены. Для MVCC значение отметки времени отражает времяCOMMIT, которое считается временем последнего обновления. Отметки времени не сохраняются при перезапуске сервера или при извлечении таблицы из кэша словаря данныхInnoDB. -
CHECK_TIMEДата последней проверки таблицы. Не все движки хранения обновляют это время, в этом случае значение всегда
NULL.Для разграниченных таблиц
InnoDB,CHECK_TIMEвсегдаNULL. -
TABLE_COLLATIONЗначение по умолчанию сортировки таблицы. Вывод не содержит явного списка набора символов по умолчанию таблицы, но имя сортировки начинается с имени набора символов.
-
CHECKSUMТекущее значение контрольной суммы, если таковое имеется.
-
CREATE_OPTIONSДополнительные параметры, используемые с
CREATE TABLE.CREATE_OPTIONSпоказываетpartitionedдля разграниченной таблицы.CREATE_OPTIONSпоказываетENCRYPTIONпредложение, указанное для таблиц, созданных в табличных пространствах с отдельным файлом на таблицу. Показывает предложение шифрования для табличных пространств с отдельным файлом на таблицу, если таблица зашифрована или если указанное шифрование отличается от шифрования схемы. Предложение шифрования не отображается для таблиц, созданных в общем табличном пространстве. Чтобы определить зашифрованные табличные пространства с отдельным файлом на таблицу и общие табличные пространства, запросите колонкуINNODB_TABLESPACESENCRYPTION.При создании таблицы с отключенным
CREATE_OPTIONS, используется формат строки по умолчанию движка хранения, если указанный формат строки не поддерживается. Фактический формат строки таблицы отображается в колонкеROW_FORMAT.CREATE_OPTIONSпоказывает формат строки, указанный вCREATE TABLEинструкции.При изменении движка хранения таблицы, параметры таблицы, которые не применимы к новому движку хранения, сохраняются в определении таблицы для возможности возврата таблицы с её ранее определёнными параметрами к исходному движку хранения, если это необходимо. Параметры, которые могут быть сохранены, отображаются в столбце
CREATE_OPTIONS. -
TABLE_COMMENTКомментарий, использованный при создании таблицы (или информация о том, почему MySQL не смог получить информацию о таблице).
Примечания
Для таблиц
NDB, вывод этого оператора показывает соответствующие значения для столбцовAVG_ROW_LENGTHиDATA_LENGTH, за исключением того, что столбцыBLOBне учитываются.Для таблиц
NDB,DATA_LENGTHвключает только данные, хранящиеся в оперативной памяти; столбцыMAX_DATA_LENGTHиDATA_FREEотносятся к данным на диске.Для таблиц данных на диске NDB Cluster,
MAX_DATA_LENGTHпоказывает выделенное пространство для дисковой части таблицы или фрагмента данных на диске. (Использование ресурсов памяти для данных в оперативной памяти отображается в столбцеDATA_LENGTH.)Для таблиц
MEMORYзначенияDATA_LENGTH,MAX_DATA_LENGTHиINDEX_LENGTHприблизительно соответствуют фактическому объёму выделенной памяти. Алгоритм выделения резервирует память большими блоками, чтобы уменьшить количество операций выделения.Для представлений большинство столбцов
TABLESравны 0 илиNULL, за исключением того, чтоTABLE_NAMEуказывает имя представления,CREATE_TIMEуказывает время создания, аTABLE_COMMENTговоритVIEW.
Информация о таблицах также доступна из операторов SHOW TABLE STATUS и SHOW TABLES. См. Раздел 15.7.7.38, «Оператор SHOW TABLE STATUS» и Раздел 15.7.7.39, «Оператор SHOW TABLES». Следующие операторы эквивалентны:
SELECT
TABLE_NAME, ENGINE, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH,
DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT,
CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, CHECKSUM,
CREATE_OPTIONS, TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'
[AND table_name LIKE 'wild']
SHOW TABLE STATUS
FROM db_name
[LIKE 'wild']
Следующие операторы эквивалентны:
SELECT
TABLE_NAME, TABLE_TYPE
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'
[AND table_name LIKE 'wild']
SHOW FULL TABLES
FROM db_name
[LIKE 'wild']
© 2025 Oracle
Licensed under the GPLv2 License.