Spec-Zone.ru › MySQL 9.2

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/innodb-best-practices.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API