MySQL Storage Engines
Двигатели хранения
Механизмы хранения (базовый программный компонент) являются компонентами MySQL, которые могут обрабатывать операции SQL для различных типов таблиц для хранения и управления информацией в базе данных. InnoDB в основном используется механизм хранения общего назначения и начиная с MySQL 5.5 и более поздних версий это механизм по умолчанию. В MySQL доступно множество механизмов хранения, и они используются для разных целей.
Версия: MySQL 5.6
Системы хранения MySQL
Двигатели | Описание |
---|---|
InnoDB | Это механизм хранения по умолчанию для MySQL 5.5 и выше. Он предоставляет безопасные транзакции (ACID-совместимые) таблицы, поддерживает ограничения ссылочной целостности FOREIGN KEY. Он поддерживает функции фиксации, отката и восстановления после сбоя для защиты данных. Он также поддерживает блокировку на уровне строк. Это «согласованное чтение без блокировки» повышает производительность при использовании в многопользовательской среде. Он хранит данные в кластерных индексах, что уменьшает количество операций ввода-вывода для запросов на основе первичных ключей. |
MyISAM | Этот механизм хранения управляет нетранзакционными таблицами, обеспечивает высокоскоростное хранение и извлечение, поддерживает полнотекстовый поиск. |
ОБЪЕМ ПАМЯТИ | Предоставляет таблицы в памяти, ранее известные как HEAP. Он хранит все данные в оперативной памяти для более быстрого доступа, чем хранение данных на дисках. Полезно для быстрого поиска справочных и других идентичных данных. |
MERGE | Группы более чем одной аналогичной таблицы MyISAM, которые должны обрабатываться как одна таблица, могут обрабатывать нетранзакционные таблицы, включенные по умолчанию. |
ПРИМЕР | Вы можете создавать таблицы с этим механизмом, но не можете хранить или извлекать данные. Цель этого - научить разработчиков писать новый механизм хранения. |
АРХИВ | Используется для хранения большого количества данных, не поддерживает индексы. |
CSV | Хранит данные в формате значения, разделенного запятыми, в текстовом файле. |
ЧЕРНАЯ ДЫРА | Принимает данные для хранения, но всегда возвращает пустое. |
FEDERATED | Хранит данные в удаленной базе данных. |
Другие темы:
Список модулей хранения, поддерживаемых вашей установкой MySQL
Различия между InnoDB и MyISAM
Список модулей хранения, поддерживаемых вашей установкой MySQL
Следующая команда отображает информацию о состоянии механизмов хранения сервера.
mysql> ПОКАЗАТЬ ДВИГАТЕЛИ; + -------------------- + --------- + ------------------ ---------------------------------------------- + --- ----------- + ------ + ------------ + | Двигатель | Поддержка | Комментарий | Транзакции | XA | Точки сохранения | + -------------------- + --------- + ------------------ ---------------------------------------------- + --- ----------- + ------ + ------------ + | ФЕДЕРАЦИЯ | НЕТ | Объединенный механизм хранения MySQL | NULL | NULL | NULL | | MRG_MYISAM | ДА | Коллекция идентичных таблиц MyISAM | НЕТ | НЕТ | НЕТ | | MyISAM | ДА | MyISAM механизм хранения | НЕТ | НЕТ | НЕТ | | Черная дыра | ДА | / dev / null хранилище (все, что вы пишете в него, исчезает) | НЕТ | НЕТ | НЕТ | | CSV | ДА | CSV хранилище данных | НЕТ | НЕТ | НЕТ | | ПАМЯТЬ | ДА | На основе хэша, хранится в памяти, полезно для временных таблиц | НЕТ | НЕТ | НЕТ | | АРХИВ | ДА | Архив для хранения движка | НЕТ | НЕТ | НЕТ | | InnoDB | ПО УМОЛЧАНИЮ | Поддерживает транзакции, блокировку на уровне строк и внешние ключи | ДА | ДА | ДА | | PERFORMANCE_SCHEMA | ДА | Схема исполнения | НЕТ | НЕТ | НЕТ | + -------------------- + --------- + ------------------ ---------------------------------------------- + --- ----------- + ------ + ------------ + 9 рядов в наборе (0,28 сек)
Настройка механизма хранения
В CREATE TABLE STATEMENT вы можете добавить опцию ENGINE table, чтобы упомянуть механизм хранения. Смотрите следующие операторы CREATE TABLE, где использовались разные движки:
CREATE TABLE t1 (i INT) ENGINE = INNODB; CREATE TABLE t2 (i INT) ENGINE = CSV; CREATE TABLE t3 (i INT) ДВИГАТЕЛЬ = ПАМЯТЬ;
В MySQL 5.6 движком по умолчанию является InnoDB. Движок хранилища по умолчанию используется, если вы не упомянули имя другого движка в опции ENGINE. Вы можете указать механизм по умолчанию, используя опцию запуска сервера --default-storage-engine (формат командной строки) или установив параметр default-storage-engine в файле конфигурации my.cnf.
Вы можете установить механизм хранения по умолчанию для текущего сеанса, установив переменную default_storage_engine с помощью команды set.
SET default_storage_engine = ARCHIVE;
Если вы хотите преобразовать таблицу из одного механизма хранения в другой, используйте инструкцию ALTER TABLE. Смотрите следующее утверждение:
ALTER TABLE table1 ENGINE = InnoDB;
Чтобы сохранить определения таблиц и столбцов для новой таблицы, MySQL всегда создает файл .frm. В зависимости от механизма хранения индекс и данные таблицы могут храниться в одном или нескольких других файлах. Сервер создает файл .frm выше уровня механизма хранения.
MySQL: механизм хранения InnoDB
InnoDB - это механизм хранения для MySQL, который сочетает в себе высокую надежность и высокую производительность. Начиная с MySQL 5.5 и выше, это механизм хранения по умолчанию.
Особенности движка хранения InnoDB:
Пределы хранения | 64TB | операции | да | Блокировка детализации | Строка |
MVCC (Multiversion параллельный контроль) | да | Поддержка типов геопространственных данных | да | Поддержка геопространственной индексации | нет |
B-древовидные индексы | да | T-дерево индексов | нет | Хеш-индексы | нет |
Индексы полнотекстового поиска | да | Кластерные индексы | да | Кэши данных | да |
Индексные кеши | да | Сжатые данные | да | Зашифрованные данные | да |
Поддержка базы данных кластера | нет | Поддержка репликации | да | Поддержка внешнего ключа | да |
Резервное копирование / восстановление на момент времени | да | Поддержка кеша запросов | да | Обновить статистику для словаря данных | да |
Преимущества хранилища InnoDB
- InnoDB имеет максимальную производительность при обработке больших объемов данных.
- Его операции DML (добавление, обновление и удаление данных) совместимы с моделью ACID (атомарной, согласованной, изолированной и надежной), с транзакциями, поддерживающими фиксацию, откат и восстановление после сбоя для защиты пользовательских данных.
- Система блокировки на уровне строк (блокировки размещаются на отдельных записях (строках)) повышает многопользовательский параллелизм и производительность. Все блокировки InnoDB, удерживаемые транзакцией, снимаются при фиксации или отмене транзакции.
- Таблицы InnoDB располагают ваши данные на диске для оптимизации запросов на основе первичных ключей.
- InnoDB поддерживает ограничения FOREIGN KEY для сохранения целостности данных. Поэтому вставки, обновления и удаления проверяются, чтобы убедиться, что они не приводят к несоответствиям между разными таблицами.
- В одном выражении можно смешивать таблицы InnoDB с таблицами из других механизмов хранения MySQL. Например, вы можете использовать операцию соединения для объединения данных из таблиц InnoDB и MEMORY в одном запросе.
Создание таблиц InnoDB:
Используйте оператор CREATE TABLE, чтобы создать таблицу InnoDB без каких-либо специальных предложений. Начиная с MySQL 5.5, это стандартный механизм хранения MySQL. В MySQL 5.6 при выполнении оператора CREATE TABLE без предложения ENGINE = создается таблица InnoDB. Вот пример:
mysql> CREATE TABLE table1 (col1 INT, col2 CHAR (30), ПЕРВИЧНЫЙ КЛЮЧ (col1)); Запрос в порядке, затронуто 0 строк (1,11 с) mysql> DESC table1; + ------- + ---------- + ------ + ----- + --------- + ------- + | Поле | Тип | Null | Ключ | По умолчанию | Extra | + ------- + ---------- + ------ + ----- + --------- + ------- + | col1 | int (11) | НЕТ | PRI | 0 | | | col2 | символ (30) | ДА | | NULL | | + ------- + ---------- + ------ + ----- + --------- + ------- + 2 ряда в наборе (0,21 сек)
Следующий оператор SHOW TABLE STATUS показывает свойства таблиц (принадлежит базе данных «tutorial»).
mysql> ПОКАЗАТЬ СТАТУС ИЗ УЧЕБНОГО ПОЛОЖЕНИЯ + -------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ----------------- + - ------------ + ----------- + ---------------- + -------- ------------- + ------------- + ------------ + --------- -------- + ---------- + ---------------- + --------- + | Имя | Двигатель | Версия | Row_format | Ряды | Avg_row_length | Длина_данных | Max_data_length | Index_length | Data_free | Авто_инкремент | Create_time | Update_time | Check_time | Сопоставление | Контрольная сумма | Create_options | Комментарий | + -------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ----------------- + - ------------ + ----------- + ---------------- + -------- ------------- + ------------- + ------------ + --------- -------- + ---------- + ---------------- + --------- + | таблица1 | InnoDB | 10 | Компакт | 0 | 0 | 16384 | 0 | 0 | 0 | NULL | 2014-02-14 12:08:34 | NULL | NULL | utf8_general_ci | NULL | | | + -------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ----------------- + - ------------ + ----------- + ---------------- + -------- ------------- + ------------- + ------------ + --------- -------- + ---------- + ---------------- + --------- + 1 ряд в наборе (0,00 сек)
Обработка AUTO_INCREMENT в InnoDB :
InnoDB предоставляет метод, который улучшает масштабируемость и производительность операторов SQL, которые вставляют строки в таблицы со столбцами AUTO_INCREMENT. Чтобы использовать механизм AUTO_INCREMENT с таблицей InnoDB, столбец AUTO_INCREMENT (в данном случае col1) должен быть определен как часть индекса. Смотрите следующий пример:
mysql> CREATE TABLE table1 (col1 INT (10) NOT NULL AUTO_INCREMENT, col2 CHAR (30), первичный ключ (col1)); Запрос в порядке, затронуто 0 строк (0,50 с)
Обработка ограничений FOREIGN KEY в InnoDB :
MySQL поддерживает внешние ключи, которые позволяют перекрестно ссылаться на связанные данные между таблицами, и ограничения внешнего ключа, которые помогают поддерживать согласованность этих распределенных данных. На определения внешнего ключа для таблиц InnoDB распространяются следующие условия:
- InnoDB позволяет внешнему ключу ссылаться на любой столбец индекса или группу столбцов. Однако в ссылочной таблице должен быть индекс, в котором указанные столбцы перечислены как первые столбцы в том же порядке.
- InnoDB в настоящее время не поддерживает внешние ключи для таблиц с пользовательским разделением. Это означает, что ни одна разделенная пользователем таблица InnoDB не может содержать ссылки на внешние ключи или столбцы, на которые ссылаются внешние ключи.
- InnoDB позволяет ограничению внешнего ключа ссылаться на неуникальный ключ. Это расширение InnoDB для стандартного SQL.
Ограничение: таблица InnoDB :
- В таблице допускается максимум 1017 столбцов (в MySQL 5.6.9 по сравнению с более ранним пределом 1000).
- В таблице допускается не более 64 вторичных индексов. Вторичные индексы - это тип индекса InnoDB, который представляет собой подмножество столбцов таблицы.
- По умолчанию ключ индекса для индекса из одного столбца может содержать до 767 байтов. То же ограничение длины применяется к любому префиксу ключа индекса.
- Внутренняя максимальная длина ключа InnoDB составляет 3500 байт, но сам MySQL ограничивает это до 3072 байт (объединенный индексный ключ в многостолбцовом индексе).
- Максимальная длина строки, за исключением столбцов переменной длины (VARBINARY, VARCHAR, BLOB и TEXT), составляет около 8000 байтов при размере страницы по умолчанию 16 КБ.
- Внутренне InnoDB поддерживает размеры строк, превышающие 65 535 байт, но сам MySQL налагает ограничение размера строки в 65 535 для объединенного размера всех столбцов.
- Максимальный размер табличного пространства составляет четыре миллиарда страниц базы данных (64 ТБ), а минимальный размер табличного пространства немного больше 10 МБ.
MySQL: механизм хранения MyISAM
Механизм хранения MyISAM основан на более старом механизме хранения ISAM (сейчас недоступен), но имеет много полезных расширений.
Особенности механизма хранения MyISAM:
Пределы хранения | 256TB | операции | нет | Блокировка детализации | Таблица |
MVCC (Multiversion параллельный контроль) | нет | Поддержка типов геопространственных данных | да | Поддержка геопространственной индексации | да |
B-древовидные индексы | да | T-дерево индексов | нет | Хеш-индексы | нет |
Индексы полнотекстового поиска | да | Кластерные индексы | нет | Кэши данных | нет |
Индексные кеши | да | Сжатые данные | да | Зашифрованные данные | да |
Поддержка базы данных кластера | нет | Поддержка репликации | да | Поддержка внешнего ключа | нет |
Резервное копирование / восстановление на момент времени | да | Поддержка кеша запросов | да | Обновить статистику для словаря данных | да |
Каждая таблица MyISAM хранится на диске в трех файлах.
- Файл .frm хранит формат таблицы.
- Файл данных имеет расширение .MYD (MYData).
- Индексный файл имеет расширение .MYI (MYIndex).
Создание таблиц MyISAM:
Используйте оператор CREATE TABLE, чтобы создать таблицу MyISAM с предложением ENGINE. Начиная с MySQL 5.6, необходимо использовать предложение ENGINE, чтобы указать механизм хранения MyISAM, потому что InnoDB является механизмом по умолчанию. Вот пример:
mysql> CREATE TABLE table2 (col1 INT, col2 CHAR (30)) ENGINE = MYISAM;
Запрос в порядке, затронуто 0 строк (0,19 с)
Следующий оператор SHOW TABLE STATUS показывает свойства таблиц (принадлежит базе данных «tutorial»).
mysql> ПОКАЗАТЬ СТАТУС ИЗ УЧЕБНОГО ПОЛОЖЕНИЯ;
+ -------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ------------------- + -------------- + ----------- + ---------------- + ------ --------------- + --------------------- + ------------ + ----------------- + ---------- + ---------------- + --- ------ +
| Имя | Двигатель | Версия | Row_format | Ряды | Avg_row_length | Длина_данных | Max_data_length | Index_length | Data_free | Авто_инкремент | Create_time | Update_time | Check_time | Сопоставление | Контрольная сумма | Create_options | Комментарий |
+ -------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ------------------- + -------------- + ----------- + ---------------- + ------ --------------- + --------------------- + ------------ + ----------------- + ---------- + ---------------- + --- ------ +
| таблица1 | InnoDB | 10 | Компакт | 0 | 0 | 16384 | 0 | 0 | 0 | 1 | 2014-02-14 13:16:16 | NULL | NULL | utf8_general_ci | NULL | | |
| таблица2 | MyISAM | 10 | Исправлено | 0 | 0 | 0 | 26740122787512319 | 1024 | 0 | NULL | 2014-02-14 15:29:18 | 2014-02-14 15:29:18 | NULL | utf8_general_ci | NULL | | |
+ -------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ------------------- + -------------- + ----------- + ---------------- + ------ --------------- + --------------------- + ------------ + ----------------- + ---------- + ---------------- + --- ------ +
2 ряда в наборе (0,07 сек)
Основные характеристики таблиц MyISAM:
- Большие файлы длиной до 63 бит поддерживаются в файловых системах и операционных системах, которые поддерживают большие файлы.
- (2 32 ) 2 (1.844E + 19) строки разрешены в таблице MyISAM.
- Максимальное количество индексов - 64 и число столбцов - 16.
- Максимальная длина ключа составляет 1000 байтов.
- Поддерживается внутренняя обработка одного столбца AUTO_INCREMENT на таблицу.
- Вы можете поместить файл данных и индексный файл в разные каталоги на разных физических устройствах, чтобы повысить скорость с помощью параметров таблицы DATA DIRECTORY и INDEX DIRECTORY для CREATE TABLE.
- BLOB и TEXT столбцы могут быть проиндексированы.
- Значения NULL допускаются в индексированных столбцах. Это занимает от 0 до 1 байта на ключ.
- Каждый столбец символов может иметь различный набор символов.
- Поддержка истинного типа VARCHAR; столбец VARCHAR начинается с длины, хранящейся в одном или двух байтах.
- Таблицы со столбцами VARCHAR могут иметь фиксированную или динамическую длину строки.
- Сумма длин столбцов VARCHAR и CHAR в таблице может составлять до 64 КБ.
- Произвольная длина УНИКАЛЬНЫХ ограничений.
Поврежденные таблицы MyISAM:
Формат таблицы MyISAM очень надежен, но в некоторых случаях вы можете получить поврежденные таблицы, если произойдет любое из следующих событий:
- Процесс mysqld (известный как MySQL Server) завершается во время записи.
- Аппаратные сбои.
- Произошло неожиданное отключение компьютера.
- Использование внешней программы для изменения таблицы
- Программная ошибка в коде MySQL или MyISAM.
MySQL: MEMORY Storage Engine
Механизм хранения MEMORY создает таблицы, которые хранятся в памяти. Поскольку данные могут быть повреждены из-за проблем с оборудованием или электропитанием, эти таблицы можно использовать только как временные рабочие области или кэши только для чтения для данных, извлеченных из других таблиц. Когда сервер MySQL останавливается или перезапускается, данные в таблицах MEMORY теряются.
Особенности MEMORY Storage Engine:
Пределы хранения | баран | операции | нет | Блокировка детализации | Таблица |
MVCC | нет | Поддержка типов геопространственных данных | нет | Поддержка геопространственной индексации | нет |
B-древовидные индексы | да | T-дерево индексов | нет | Хеш-индексы | да |
Индексы полнотекстового поиска | нет | Кластерные индексы | нет | Кэши данных | N / A |
Индексные кеши | N / A | Сжатые данные | нет | Зашифрованные данные | да |
Поддержка базы данных кластера | нет | Поддержка репликации | да | Поддержка внешнего ключа | нет |
Резервное копирование / восстановление на момент времени | да | Поддержка кеша запросов | да | Обновить статистику для словаря данных | да |
Создание таблиц MEMORY:
Используйте оператор CREATE TABLE для создания таблицы MEMORY с предложением ENGINE. Начиная с MySQL 5.6, необходимо использовать предложение ENGINE, чтобы указать механизм хранения MEMORY, потому что InnoDB является механизмом по умолчанию. В следующем примере показано, как создать и использовать таблицу MEMORY:
mysql> SELECT * FROM hr.departments; + --------------- + ---------------------- + ---------- - + ------------- + | DEPARTMENT_ID | DEPARTMENT_NAME | MANAGER_ID | LOCATION_ID | + --------------- + ---------------------- + ---------- - + ------------- + | 10 | Администрация | 200 | 1700 | | 20 | Маркетинг 201 | 1800 | | 30 | Покупка | 114 | 1700 | | 40 | Человеческие ресурсы | 203 | 2400 | | 50 | Доставка | 121 | 1500 | | 60 | IT | 103 | 1400 | | 70 | Связи с общественностью | 204 | 2700 | | 80 | Продажи | 145 | 2500 | | 90 | Исполнительный | 100 | 1700 | | 100 | Финансы | 108 | 1700 | | 110 | Бухгалтерский учет | 205 | 1700 | | 120 | Казначейство | 0 | 1700 | | - - - - - - - - | - - - - - - - - - - - | - - - - - - | - - - - - - - | | - - - - - - - - | - - - - - - - - - - - | - - - - - - | - - - - - - - | + --------------- + ---------------------- + ---------- - + ------------- + 27 рядов в наборе (0,01 с) mysql> CREATE TABLE test7 ENGINE = ВЫБОР ПАМЯТИ * ОТ hr.departments; Запрос в порядке, затронуто 27 строк (0,06 с) Записи: 27 Дубликаты: 0 Предупреждения: 0 mysql> SELECT * FROM test7 WHERE LOCATION_ID> 1700; + --------------- + ------------------ + ------------ + - ------------ + | DEPARTMENT_ID | DEPARTMENT_NAME | MANAGER_ID | LOCATION_ID | + --------------- + ------------------ + ------------ + - ------------ + | 20 | Маркетинг 201 | 1800 | | 40 | Человеческие ресурсы | 203 | 2400 | | 70 | Связи с общественностью | 204 | 2700 | | 80 | Продажи | 145 | 2500 | + --------------- + ------------------ + ------------ + - ------------ + 4 ряда в наборе (0,00 сек)
Следующий оператор SHOW TABLE STATUS показывает свойства таблиц (принадлежит базе данных «tutorial»).
mysql> ПОКАЗАТЬ СТАТУС ИЗ УЧЕБНОГО ПОЛОЖЕНИЯ;
+ -------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ------------------- + -------------- + ----------- + ---------------- + ------ --------------- + --------------------- + ------------ + ----------------- + ---------- + ---------------- + --- ------ +
| Имя | Двигатель | Версия | Row_format | Ряды | Avg_row_length | Длина_данных | Max_data_length | Index_length | Data_free | Авто_инкремент | Create_time | Update_time | Check_time | Сопоставление | Контрольная сумма | Create_options | Комментарий |
+ -------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ------------------- + -------------- + ----------- + ---------------- + ------ --------------- + --------------------- + ------------ + ----------------- + ---------- + ---------------- + --- ------ +
| таблица1 | InnoDB | 10 | Компакт | 0 | 0 | 16384 | 0 | 0 | 0 | 1 | 2014-02-14 13:16:16 | NULL | NULL | utf8_general_ci | NULL | | |
| таблица2 | MyISAM | 10 | Исправлено | 0 | 0 | 0 | 26740122787512319 | 1024 | 0 | NULL | 2014-02-14 15:29:18 | 2014-02-14 15:29:18 | NULL | utf8_general_ci | NULL | | |
| test7 | ПАМЯТЬ | 10 | Исправлено | 27 | 39 | 59400 | 16357770 | 0 | 0 | NULL | 2014-02-17 11:06:46 | NULL | NULL | utf8_general_ci | NULL | | |
+ -------- + -------- + --------- + ------------ + ------ + - --------------- + ------------- + ------------------- + -------------- + ----------- + ---------------- + ------ --------------- + --------------------- + ------------ + ----------------- + ---------- + ---------------- + --- ------ +
3 ряда в наборе (0,00 сек)
Удалить таблицу MEMORY:
mysql> DROP TABLE TEST7;
Запрос в порядке, затронуто 0 строк (0,00 с)
Индексы: Механизм хранения MEMORY поддерживает индексы HASH и BTREE. Добавляя предложение USING, вы можете указать одно или другое для данного индекса. Смотрите следующие примеры:
CREATE TABLE тест (ID INT, ИНДЕКС С ИСПОЛЬЗОВАНИЕМ HASH (id)) ДВИГАТЕЛЬ = ПАМЯТЬ; CREATE TABLE тест (ID INT, ИНДЕКС, ИСПОЛЬЗУЯ BTREE (id)) ДВИГАТЕЛЬ = ПАМЯТЬ;
Когда использовать механизм хранения MEMORY:
- Операции с временными, некритическими данными, такими как управление сеансами или кэширование.
- Память в памяти для быстрого доступа и низкой задержки. Объем данных может полностью поместиться в памяти, не заставляя операционную систему выгружать страницы виртуальной памяти.
- По умолчанию ключ индекса для индекса из одного столбца может содержать до 767 байтов. То же ограничение длины применяется к любому префиксу ключа индекса.
- Внутренняя максимальная длина ключа InnoDB составляет 3500 байт, но сам MySQL ограничивает это до 3072 байт (объединенный индексный ключ в многостолбцовом индексе).
- Максимальная длина строки, за исключением столбцов переменной длины (VARBINARY, VARCHAR, BLOB и TEXT), составляет около 8000 байтов при размере страницы по умолчанию 16 КБ.
- Внутренне InnoDB поддерживает размеры строк, превышающие 65 535 байт, но сам MySQL налагает ограничение размера строки в 65 535 для объединенного размера всех столбцов.
- Максимальный размер табличного пространства составляет четыре миллиарда страниц базы данных (64 ТБ), а минимальный размер табличного пространства немного больше 10 МБ.
MySQL: MERGE Storage Engine
Механизм хранения MERGE (также известный как MRG_MyISAM) представляет собой набор идентичных таблиц MyISAM (идентичные столбцы и индексные данные в одинаковом порядке), которые можно использовать как одну таблицу. У вас должны быть привилегии SELECT, DELETE и UPDATE для таблиц MyISAM, которые вы сопоставляете с таблицей MERGE.
Создание таблиц MERGE:
Чтобы создать таблицу MERGE, необходимо указать параметр UNION = (список таблиц) (указывает, какие таблицы MyISAM использовать) в операторе CREAE TABLE. В следующем примере сначала мы создали три таблицы с двумя строками, затем объединили их в одну таблицу, используя механизм хранения MERGE:
mysql> CREATE TABLE tabl1 (rollno INT NOT NULL AUTO_INCREMENT PRIMARY KEY, класс CHAR (5), student_name CHAR (40)) ENGINE = MyISAM; Запрос в порядке, затронуто 0 строк (0,07 сек) mysql> CREATE TABLE tabl2 (rollno INT NOT NULL AUTO_INCREMENT PRIMARY KEY, класс CHAR (5), student_name CHAR (40)) ENGINE = MyISAM; Запрос в порядке, затронуто 0 строк (0,06 с) mysql> CREATE TABLE tabl3 (rollno INT NOT NULL AUTO_INCREMENT PRIMARY KEY, класс CHAR (5), student_name CHAR (40)) ENGINE = MyISAM; Запрос в порядке, затронуто 0 строк (0,09 с) mysql> INSERT INTO tabl1 (class, student_name) VALUES ('V', 'Steven'), ('V', 'Neena'); Запрос в порядке, затронуто 2 строки (0,07 сек) Записи: 2 Дубликаты: 0 Предупреждения: 0 mysql> INSERT INTO tabl2 (class, student_name) VALUES ('VI', 'Lex'), ('VI', 'Alexander'); Запрос в порядке, затронуто 2 строки (0,02 сек) Записи: 2 Дубликаты: 0 Предупреждения: 0 mysql> INSERT INTO tabl3 (class, student_name) VALUES ('VII', 'Bruce'), ('VII', 'David'); Запрос в порядке, затронуто 2 строки (0,01 с) Записи: 2 Дубликаты: 0 Предупреждения: 0 mysql> CREATE TABLE allclass (rollno INT NOT NULL, класс CHAR (5), student_name CHAR (40)) ENGINE = MERGE UNION = (tabl1, tabl2, tabl3) INSERT_METHOD = LAST; Запрос в порядке, затронуто 0 строк (0,09 с) mysql> select * from allclass; + -------- + ------- + -------------- + | роллно | класс | имя студента | + -------- + ------- + -------------- + | 1 | V | Стивен | | 2 | V | Нина | | 1 | VI | Лекс | | 2 | VI | Александр | | 1 | VII | Брюс | | 2 | VII | Дэвид | + -------- + ------- + -------------- + 6 рядов в наборе (0,00 сек)
Следующий оператор SHOW TABLE STATUS показывает свойства таблиц (принадлежит базе данных «tutorial»).
mysql> ПОКАЗАТЬ СТАТУС ИЗ УЧЕБНОГО ПОЛОЖЕНИЯ; + ---------- + ------------ + --------- + ------------ + - ---- + ---------------- + ------------- + -------------- ----- + -------------- + ----------- + ---------------- + --------------------- + --------------------- + ------ ------ + ----------------- + ---------- + -------------- - + --------- + | Имя | Двигатель | Версия | Row_format | Ряды | Avg_row_length | Длина_данных | Max_data_length | Index_length | Data_free | Авто_инкремент | Create_time | Update_time | Check_time | Сопоставление | Контрольная сумма | Create_options | Комментарий | + ---------- + ------------ + --------- + ------------ + - ---- + ---------------- + ------------- + -------------- ----- + -------------- + ----------- + ---------------- + --------------------- + --------------------- + ------ ------ + ----------------- + ---------- + -------------- - + --------- + | AllClass | MRG_MYISAM | 10 | Исправлено | 6 | 140 | 840 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | | | | tabl1 | MyISAM | 10 | Исправлено | 2 | 140 | 280 | 39406496739491839 | 2048 | 0 | 3 | 2014-02-17 14:33:52 | 2014-02-17 14:42:21 | NULL | utf8_general_ci | NULL | | | | tabl2 | MyISAM | 10 | Исправлено | 2 | 140 | 280 | 39406496739491839 | 2048 | 0 | 3 | 2014-02-17 14:34:01 | 2014-02-17 14:43:09 | NULL | utf8_general_ci | NULL | | | | tabl3 | MyISAM | 10 | Исправлено | 2 | 140 | 280 | 39406496739491839 | 2048 | 0 | 3 | 2014-02-17 14:34:22 | 2014-02-17 14:43:59 | NULL | utf8_general_ci | NULL | | | | таблица1 | InnoDB | 10 | Компакт | 0 | 0 | 16384 | 0 | 0 | 0 | 1 | 2014-02-14 13:16:16 | NULL | NULL | utf8_general_ci | NULL | | | | таблица2 | MyISAM | 10 | Исправлено | 0 | 0 | 0 | 26740122787512319 | 1024 | 0 | NULL | 2014-02-14 15:29:18 | 2014-02-14 15:29:18 | NULL | utf8_general_ci | NULL | | | | test7 | ПАМЯТЬ | 10 | Исправлено | 27 | 39 | 59400 | 16357770 | 0 | 0 | NULL | 2014-02-17 11:06:46 | NULL | NULL | utf8_general_ci | NULL | | | + ---------- + ------------ + --------- + ------------ + - ---- + ---------------- + ------------- + -------------- ----- + -------------- + ----------- + ---------------- + --------------------- + --------------------- + ------ ------ + ----------------- + ---------- + -------------- - + --------- + 7 строк в наборе (0,16 с)
Проблема безопасности: если у пользователя есть доступ к таблице MyISAM, скажем, t1, он может создать таблицу MERGE m1, которая обращается к t1. Однако, если администратор аннулирует привилегии пользователя на t1, пользователь может продолжить доступ к данным с t1 по m1.
MySQL: CSV Storage Engine
Механизм хранения CSV хранит данные в текстовых файлах, используя формат значений, разделенных запятыми, и механизм хранения CSV всегда компилируется в сервер MySQL. Сервер создает файл формата таблицы (расширение .frm) и файл данных (расширение .csv) в каталоге базы данных при создании таблицы CSV. И имена файлов .frm и .csv начинаются с имени таблицы. Файл данных представляет собой простой текстовый файл, и механизм хранения сохраняет данные в формате значений, разделенных запятыми. В следующем примере показано, как создать и использовать таблицу CSV:
Пример вывода:
mysql> CREATE TABLE color (slno INT NOT NULL, cname CHAR (30) NOT NULL, ccode CHAR (6) NOT NULL) ENGINE = CSV; Запрос в порядке, затронуто 0 строк (0,12 сек) mysql> INSERT INTO color VALUES (1, «IndianRed», «CD5C5C»), (2, «LightCoral», «F08080»), (3, «Лосось», «FA8072»); Запрос в порядке, затронуто 3 строки (0,02 сек) Записи: 3 Дубликаты: 0 Предупреждения: 0 mysql> SELECT * from color; + ------ + ------------ + -------- + | Слно | имя | код | + ------ + ------------ + -------- + | 1 | IndianRed | CD5C5C | | 2 | LightCoral | F08080 | | 3 | Лосось | FA8072 | + ------ + ------------ + -------- + 3 ряда в наборе (0,00 сек)
Вы можете прочитать, изменить файл 'color.CSV' с помощью приложений для работы с электронными таблицами, таких как Microsoft Excel или StarOffice Calc.
Ограничения CSV:
- Не поддерживает индексацию.
- Не поддерживает разбиение.
- Все столбцы должны иметь атрибут NOT NULL в таблице CSV.
Следующий оператор SHOW TABLE STATUS показывает свойства таблиц (принадлежит базе данных «tutorial»).
mysql> ПОКАЗАТЬ СТАТУС ИЗ УЧЕБНОГО ПОЛОЖЕНИЯ; + ---------- + ------------ + --------- + ------------ + - ---- + ---------------- + ------------- + -------------- ----- + -------------- + ----------- + ---------------- + --------------------- + --------------------- + ------ ------ + ----------------- + ---------- + -------------- - + --------- + | Имя | Двигатель | Версия | Row_format | Ряды | Avg_row_length | Длина_данных | Max_data_length | Index_length | Data_free | Авто_инкремент | Create_time | Update_time | Check_time | Сопоставление | Контрольная сумма | Create_options | Комментарий | + ---------- + ------------ + --------- + ------------ + - ---- + ---------------- + ------------- + -------------- ----- + -------------- + ----------- + ---------------- + --------------------- + --------------------- + ------ ------ + ----------------- + ---------- + -------------- - + --------- + | AllClass | MRG_MYISAM | 10 | Исправлено | 6 | 140 | 840 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | | | | цвет | CSV | 10 | Исправлено | 3 | 0 | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | | | | tabl1 | MyISAM | 10 | Исправлено | 2 | 140 | 280 | 39406496739491839 | 2048 | 0 | 3 | 2014-02-17 14:33:52 | 2014-02-17 14:42:21 | NULL | utf8_general_ci | NULL | | | | tabl2 | MyISAM | 10 | Исправлено | 2 | 140 | 280 | 39406496739491839 | 2048 | 0 | 3 | 2014-02-17 14:34:01 | 2014-02-17 14:43:09 | NULL | utf8_general_ci | NULL | | | | tabl3 | MyISAM | 10 | Исправлено | 2 | 140 | 280 | 39406496739491839 | 2048 | 0 | 3 | 2014-02-17 14:34:22 | 2014-02-17 14:43:59 | NULL | utf8_general_ci | NULL | | | | таблица1 | InnoDB | 10 | Компакт | 0 | 0 | 16384 | 0 | 0 | 0 | 1 | 2014-02-14 13:16:16 | NULL | NULL | utf8_general_ci | NULL | | | | таблица2 | MyISAM | 10 | Исправлено | 0 | 0 | 0 | 26740122787512319 | 1024 | 0 | NULL | 2014-02-14 15:29:18 | 2014-02-14 15:29:18 | NULL | utf8_general_ci | NULL | | | | test7 | ПАМЯТЬ | 10 | Исправлено | 27 | 39 | 59400 | 16357770 | 0 | 0 | NULL | 2014-02-17 11:06:46 | NULL | NULL | utf8_general_ci | NULL | | | + ---------- + ------------ + --------- + ------------ + - ---- + ---------------- + ------------- + -------------- ----- + -------------- + ----------- + ---------------- + --------------------- + --------------------- + ------ ------ + ----------------- + ---------- + -------------- - + --------- + 8 рядов в наборе (0,00 сек)
MySQL: ARCHIVE Storage Engine
Механизм хранения ARCHIVE используется для хранения большого количества неиндексированных данных в очень небольшом объеме. Механизм хранения включен в двоичные дистрибутивы MySQL. Чтобы включить этот механизм хранения (если вы собираете MySQL из исходного кода), вызовите CMake с опцией -DWITH_ARCHIVE_STORAGE_ENGINE. При создании таблицы ARCHIVE сервер создает файл формата таблицы (расширение .frm) в каталоге базы данных.
Особенности хранилища ARCHIVE:
Пределы хранения | Никто | операции | нет | Блокировка детализации | Таблица |
MVCC | нет | Поддержка типов геопространственных данных | да | Поддержка геопространственной индексации | нет |
B-древовидные индексы | нет | T-дерево индексов | нет | Хеш-индексы | нет |
Индексы полнотекстового поиска | нет | Кластерные индексы | нет | Кэши данных | нет |
Индексные кеши | нет | Сжатые данные | да | Зашифрованные данные | да |
Поддержка базы данных кластера | нет | Поддержка репликации | да | Поддержка внешнего ключа | нет |
Резервное копирование / восстановление на момент времени | да | Поддержка кеша запросов | да | Обновить статистику для словаря данных | да |
АРХИВ поддерживает механизм хранения
- Вставить и выбрать.
- ORDER BY операции
- BLOB столбцы
- Атрибут столбца AUTO_INCREMENT. Столбец AUTO_INCREMENT может иметь уникальный или неуникальный индекс.
- Параметр таблицы AUTO_INCREMENT в операторах CREATE TABLE
ARCHIVE хранилище не поддерживает
- УДАЛИТЬ, ЗАМЕНИТЬ или ОБНОВИТЬ
- Вставка значения в столбец AUTO_INCREMENT меньше текущего максимального значения столбца.
АРХИВ хранилища: хранение и поиск
- Движок ARCHIVE использует сжатие данных без потерь zlib (см. Http://www.zlib.net/).
- Строки сжимаются при вставке.
- При извлечении строки распаковываются по требованию; нет кеша строк
MySQL: ПРИМЕР Механизма хранения
Механизм хранения EXAMPLE - это механизм-заглушка, который ничего не делает и служит примером в исходном коде MySQL, который разъясняет, как начать писать новые механизмы хранения. Чтобы проверить источник для механизма EXAMPLE, посмотрите в каталоге storage / example исходного дистрибутива MySQL. Когда вы создаете таблицу EXAMPLE:
- Сервер создает файл формата таблицы (расширение .frm) в каталоге базы данных.
- Другие файлы не создаются
- Данные не могут быть сохранены в таблице.
- Поиски возвращают пустой результат.
- Не поддерживает индексацию.
Чтобы включить механизм хранения EXAMPLE, если вы собираете MySQL из исходного кода, вызовите CMake с опцией -DWITH_EXAMPLE_STORAGE_ENGINE.
MySQL: BLACKHOLE Storage Engine
Механизм хранения BLACKHOLE действует как «черная дыра», которая принимает данные, но возвращает пустой результат. Чтобы включить механизм хранения BLACKHOLE (в случае сборки MySQL из исходного кода), вызовите CMake с параметром -DWITH_BLACKHOLE_STORAGE_ENGINE. Когда вы создаете таблицу BLACKHOLE, сервер создает файл формата таблицы (.frm) в каталоге базы данных. Механизм хранения BLACKHOLE поддерживает все виды индексов. Вот пример:
mysql> CREATE TABLE test10 (slno INT, сообщение CHAR (40)) ENGINE = BLACKHOLE; Запрос в порядке, затронуто 0 строк (0,16 с) mysql> INSERT INTO test10 VALUES (1, 'message1'), (2, 'message2'); Запрос в порядке, затронуто 2 строки (0,04 сек) Записи: 2 Дубликаты: 0 Предупреждения: 0 mysql> SELECT * FROM test10; Пустой набор (0,03 сек)
Следующий оператор SHOW TABLE STATUS показывает свойства таблиц (принадлежит базе данных «tutorial»).
mysql> ПОКАЗАТЬ СТАТУС ИЗ УЧЕБНОГО ПОЛОЖЕНИЯ; + ---------- + ------------ + --------- + ------------ + - ---- + ---------------- + ------------- + -------------- ----- + -------------- + ----------- + ---------------- + --------------------- + --------------------- + ------ ------ + ----------------- + ---------- + -------------- - + --------- + | Имя | Двигатель | Версия | Row_format | Ряды | Avg_row_length | Длина_данных | Max_data_length | Index_length | Data_free | Авто_инкремент | Create_time | Update_time | Check_time | Сопоставление | Контрольная сумма | Create_options | Комментарий | + ---------- + ------------ + --------- + ------------ + - ---- + ---------------- + ------------- + -------------- ----- + -------------- + ----------- + ---------------- + --------------------- + --------------------- + ------ ------ + ----------------- + ---------- + -------------- - + --------- + | AllClass | MRG_MYISAM | 10 | Исправлено | 6 | 140 | 840 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | | | | цвет | CSV | 10 | Исправлено | 2 | 0 | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | | | | tabl1 | MyISAM | 10 | Исправлено | 2 | 140 | 280 | 39406496739491839 | 2048 | 0 | 3 | 2014-02-17 14:33:52 | 2014-02-17 14:42:21 | NULL | utf8_general_ci | NULL | | | | tabl2 | MyISAM | 10 | Исправлено | 2 | 140 | 280 | 39406496739491839 | 2048 | 0 | 3 | 2014-02-17 14:34:01 | 2014-02-17 14:43:09 | NULL | utf8_general_ci | NULL | | | | tabl3 | MyISAM | 10 | Исправлено | 2 | 140 | 280 | 39406496739491839 | 2048 | 0 | 3 | 2014-02-17 14:34:22 | 2014-02-17 14:43:59 | NULL | utf8_general_ci | NULL | | | | таблица1 | InnoDB | 10 | Компакт | 0 | 0 | 16384 | 0 | 0 | 0 | 1 | 2014-02-14 13:16:16 | NULL | NULL | utf8_general_ci | NULL | | | | таблица2 | MyISAM | 10 | Исправлено | 0 | 0 | 0 | 26740122787512319 | 1024 | 0 | NULL | 2014-02-14 15:29:18 | 2014-02-14 15:29:18 | NULL | utf8_general_ci | NULL | | | | test10 | Черная дыра | 10 | Исправлено | 0 | 0 | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | | | | test7 | ПАМЯТЬ | 10 | Исправлено | 0 | 39 | 0 | 16357770 | 0 | 0 | NULL | 2014-02-19 11:42:17 | NULL | NULL | utf8_general_ci | NULL | | | + ---------- + ------------ + --------- + ------------ + - ---- + ---------------- + ------------- + -------------- ----- + -------------- + ----------- + ---------------- + --------------------- + --------------------- + ------ ------ + ----------------- + ---------- + -------------- - + --------- + 9 рядов в наборе (1,05 сек)
MySQL: FEDERATED Storage Engine
Механизм хранения FEDERATED используется для доступа к данным из удаленной базы данных MySQL без использования технологии репликации или кластеров. Запрос локальной таблицы FEDERATED автоматически извлекает данные из удаленных (объединенных) таблиц. Данные не хранятся в локальных таблицах. Чтобы включить механизм хранения FEDERATED (в случае сборки MySQL из исходного кода), вызовите CMake с параметром -DWITH_FEDERATED_STORAGE_ ENGINE.
Чтобы включить FEDERATED (не включен по умолчанию на работающем сервере), необходимо запустить двоичный файл MySQL-сервера с помощью параметра --federated. Чтобы проверить источник для механизма FEDERATED, посмотрите каталог хранилища / объединения в исходном дистрибутиве MySQL.
Создать FEDERATED таблицу
Вы можете создать таблицу FEDERATED следующими способами:
- Использование СОЕДИНЕНИЯ
- Использование CREATE SERVER
Использование CONNECTION : Чтобы использовать этот метод, необходимо указать строку CONNECTION после типа механизма в инструкции CREATE TABLE. Смотрите следующий пример:
CREATE TABLE federated_table ( roll_no INT (3) NOT NULL AUTO_INCREMENT, stu_name VARCHAR (42) NOT NULL ПО УМОЛЧАНИЮ '', total_marks INT (5) NOT NULL ПО УМОЛЧАНИЮ '0', ПЕРВИЧНЫЙ КЛЮЧ (roll_no), INDEX stu_name (stu_name), ИНДЕКС total_marks (total_marks) ) ДВИГАТЕЛЬ = FEDERATED CHARSET ПО УМОЛЧАНИЮ = latin1 CONNECTION = 'mysql: // [электронная почта защищена] _host: 9306 / federated / test10_table';
Формат строки подключения выглядит следующим образом:
scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
Куда:
- Схема: Распознанный протокол соединения. На данный момент в качестве значения схемы поддерживается только mysql.
- Имя пользователя для соединения должно быть создано на удаленном сервере и иметь соответствующие привилегии для выполнения необходимых действий, таких как SELECT, INSERT, UPDATE и т. Д. Над удаленной таблицей.
- Пароль для имени пользователя. (Необязательный)
- имя_хоста: имя хоста или IP-адрес удаленного сервера.
- port_num: номер порта (по умолчанию: 3306) для удаленного сервера. (Необязательный)
- db_name: имя базы данных, содержащей удаленную таблицу.
- tbl_name: имя удаленной таблицы.
Использование CREATE SERVER: чтобы использовать этот метод, необходимо указать строку CONNECTION после типа механизма в инструкции CREATE TABLE. Смотрите следующий пример:
СОЗДАТЬ СЕРВЕР название сервера FOREIGN DATA WRAPPER имя-оболочки ОПЦИИ (опция [, опция] ...)
Имя_сервера используется в строке подключения при создании новой таблицы FEDERATED.
Различия между InnoDB и MyISAM
Особенность | InnoDB | MyISAM |
---|---|---|
Пределы хранения | 64TB | 256TB |
операции | да | нет |
Блокировка детализации | Строка | Таблица |
MVCC | да | нет |
Поддержка типов геопространственных данных | да | да |
Поддержка геопространственной индексации | нет | да |
B-древовидные индексы | да | да |
T-дерево индексов | нет | нет |
Хеш-индексы | нет | нет |
Индексы полнотекстового поиска | да | да |
Кластерные индексы | да | нет |
Кэши данных | да | нет |
Индексные кеши | да | да |
Сжатые данные | да | да |
Зашифрованные данные | да | да |
Поддержка базы данных кластера | нет | нет |
Поддержка репликации | да | да |
Поддержка внешнего ключа | да | нет |
Резервное копирование / восстановление на момент времени | да | да |
Поддержка кеша запросов | да | да |
Обновить статистику для словаря данных | да | да |
Предыдущий: MySQL Java Connector
Далее: Структура языка MySQL
Новый контент: Composer: менеджер зависимостей для PHP , R программирования