Spec-Zone .ru
спецификации, руководства, описания, API

8.4.3.3. Как MySQL Uses Internal Temporary Tables

В некоторых случаях сервер создает внутренние временные таблицы, обрабатывая запросы. Такая таблица может быть сохранена в памяти и обработана MEMORY механизм хранения, или сохраненный на диске и обработанный MyISAM механизм хранения. Сервер может создать временную таблицу первоначально как таблицу в памяти, затем преобразовать это в дисковую таблицу, если это становится слишком большим. У пользователей нет никакого прямого управления, когда сервер создает внутреннюю временную таблицу или который механизм хранения использование сервера, чтобы управлять этим.

Временные таблицы могут быть созданы при условиях, таких как они:

Чтобы определить, требует ли запрос временной таблицы, использовать EXPLAIN и проверьте Extra столбец, чтобы видеть, говорит ли это Using temporary. См. Раздел 8.8.1, "Оптимизируя Запросы с EXPLAIN". EXPLAIN не обязательно скажет Using temporary для полученных или осуществленных временных таблиц.

Некоторые условия предотвращают использование временной таблицы в памяти, когда сервер использует дисковую таблицу вместо этого:

Если внутренняя временная таблица создается первоначально как таблица в памяти, но становится слишком большой, MySQL автоматически преобразовывает ее в дисковую таблицу. Максимальный размер для временных таблиц в памяти является минимумом tmp_table_size и max_heap_table_size значения. Это отличается от MEMORY таблицы, явно составленные с CREATE TABLE: Для таких таблиц, max_heap_table_size системная переменная определяет, как большой таблице разрешают вырасти и нет никакого преобразования в дисковый формат.

Когда сервер создает внутреннюю временную таблицу (или в памяти или на диске), это постепенно увеличивается Created_tmp_tables переменная состояния. Если сервер составляет таблицу на диске (или первоначально или преобразовывая таблицу в памяти) это постепенно увеличивается Created_tmp_disk_tables переменная состояния.