В этой статье представлен обзор подсистем хранения MySQL. Мы не будем вдаваться в подробности, поскольку планируем обсуждать подсистемы хранения и особенности их работы на протяжении всего моего блога. Однако учитывайте, что это издание не является исчерпывающим источником информации. Вам следует изучить документацию MySQL к выбранной подсистеме хранения.
MySQL хранит каждую базу данных (также именуемую схемой) как подкаталог своего каталога данных в файловой системе. Когда вы создаете таблицу, MySQL сохраняет ее определение в файле с расширением .frm
и именем, совпадающим с именем таблицы. Таким образом, при создании таблицы с именем MyTable ее определение сохраняется в файле MyTable.frm. Поскольку MySQL использует файловую систему для хранения имен баз данных и определений таблиц, чувствительность к регистру символов зависит от платформы. В MySQL для Windows имена таблиц и баз данных нечувствительны к регистру, а в операционных системах семейства UNIX — чувствительны. Каждая подсистема хранения по-разному записывает табличные данные и индексы, но сервер сам обрабатывает определение таблицы.
Для получения информации о таблицах можете использовать команду SHOW TABLE STATUS
(или, начиная с версии MySQL 5.0, сделать запрос таблиц INFORMATION- SCHEMA). Например, чтобы получить информацию о таблице user, содержащейся в базе данных mysql, выполните следующую команду:
mysql> SHOW TABLE STATUS LIKE ’user’ \G
*************************** 2. row ***************************
Name: user
Engine: MyISAM Row_format: Dynamic
Rows: 6
Avg_row_length: 59 Data_length: 356
Max_data_length: 4294967295 Index_length: 2048
Data_free: 0 Auto_increment: NULL
Create_time: 2002-01-24 18:07:17 Update.time: 2002-01-24 21:56:29 Check_time: NULL
Collation: utf8_bin Checksum: NULL
Create_options:
Comment: Users and global privileges 1 row in set (0.00 sec)
Как видите, это таблица типа MyISAM. Команда выдала также много дополнительной информации и статистики. Давайте вкратце рассмотрим, что означает каждая строка:
Name
— имя таблицы;Engine
— подсистема хранения. В старых версиях MySQL этот столбец назывался Туре, а не Engine;Row_format
— формат строки. Для таблицы MyISAM он может иметь значение Dynamic, Fixed или Compressed. Длина динамических строк может меняться, поскольку они содержат поля переменной длины типаVARCHAR
илиBLOB
. Фиксированные строки имеют один и тот же размер и состоят из полей постоянной длины, таких какCHAR
иINTEGER
. Сжатые строки существуют только в сжатых таблицах (см. далее подраздел «Сжатые таблицы MyISAM»);Rows
— количество строк в таблице. Для таблиц MyISAM и большинства других подсистем хранения это число всегда точное, для InnoDB — обычно приблизительное;Avg_row_length
— количество байтов (в среднем), содержащееся в каждой строке;Data_length
— объем данных (в байтах) во всей таблице;Max_data_length
— максимальный объем данных, который может хранить эта таблица (зависит от подсистемы хранения);Index_length
— объем дискового пространства, занятый индексными данными;Data_frее
— для таблицы MyISAM показывает объем выделенного пространства, которое в данный момент не используется. Это пространство служит для хранения ранее удаленных строк и может быть задействовано в будущем при выполнении командINSERT
;Auto_increment
— следующее значение атрибутаAUTO_INCREMENT
;Create_time
— момент создания таблицы;Update_time
— время последнего изменения таблицы;Check_time
— время последней проверки таблицы командойCHECK TABLE
или утилитой myisamchk;Collation
— устанавливаемая по умолчанию кодировка и схема упорядочения для символьных столбцов в этой таблице;Checksum
— текущая контрольная сумма содержимого всей таблицы, если ее можно определить;Create_options
— любые другие параметры, которые были указаны при создании таблицы;Comment
— это поле содержит различную дополнительную информацию. Для таблиц MyISAM в нем хранятся комментарии, добавленные при их создании. Если таблица использует подсистему хранения InnoDB, здесь указан объем свободного места в табличном пространстве. Для представлений комментарий содержит текст VIEW.
Самыми популярными встроенными системами хранения в MySQL являются InnoDB и MyISAM. Менее популярными и востребованными являются Archive, Blackhole, CSV, Federated, Memory, Merge и NDB Cluster.