17.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.