28.3.40 Таблица 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_TYPEVIEWдля таблицы,BASE TABLEдля представления или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.22, «Таблица 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.При создании таблицы с отключенным движком хранения по умолчанию используется формат строк, если указанный формат строк не поддерживается. Фактический формат строк таблицы отображается в столбце
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.