14.1.2 Рекомендованные практики для таблиц InnoDB
В этом разделе описаны лучшие практики при работе с таблицами InnoDB.
Укажите первичный ключ для каждой таблицы, используя столбец или столбцы, по которым чаще всего выполняются запросы, или значение автоинкремента, если явного первичного ключа нет.
Используйте объединения, когда данные извлекаются из нескольких таблиц на основе идентичных значений ID в этих таблицах. Для повышения производительности объединений определите внешние ключи в столбцах объединения и объявите эти столбцы со схожим типом данных в каждой таблице. Добавление внешних ключей гарантирует индексирование столбцов, что может улучшить производительность. Внешние ключи также распространяют удаления и обновления на все затронутые таблицы и предотвращают вставку данных в дочернюю таблицу, если соответствующие ID отсутствуют в родительской таблице.
Отключите автоматическое подтверждение. Подтверждение сотен раз в секунду снижает производительность (ограничивается скоростью записи вашего устройства хранения).
Группируйте связанные операции DML в транзакции, помещая их между операторами
START TRANSACTIONиCOMMIT. Хотя нежелательно слишком часто подтверждать, также не следует издавать огромные партии операторовINSERT,UPDATEилиDELETE, которые выполняются часами без подтверждения.Не используйте операторы
LOCK TABLES. InnoDB может обрабатывать несколько сеансов, одновременно читающих и записывающих в одну и ту же таблицу, без ущерба для надежности или высокой производительности. Для получения исключительного доступа к записи набора строк используйте синтаксисSELECT ... FOR UPDATE, чтобы заблокировать только те строки, которые вы намерены обновить.Включите переменную
innodb_file_per_tableили используйте общие табличные пространства для размещения данных и индексов таблиц в отдельных файлах вместо системного табличного пространства. Переменнаяinnodb_file_per_tableвключена по умолчанию.Оцените, будут ли ваши данные и шаблоны доступа использовать преимущества функций сжатия таблиц или страниц InnoDB. Вы можете сжать
InnoDBтаблицы без ущерба для возможностей чтения/записи.Запустите сервер с параметром
--sql_mode=NO_ENGINE_SUBSTITUTION, чтобы предотвратить создание таблиц с движками хранения, которые вы не хотите использовать.
© 2025 Oracle
Licensed under the GPLv2 License.