Spec-Zone .ru
спецификации, руководства, описания, API
|
В некоторых случаях сервер создает внутренние временные таблицы, обрабатывая запросы. Такая таблица может быть
сохранена в памяти и обработана MEMORY
механизм хранения, или сохраненный на диске
и обработанный MyISAM
механизм хранения. Сервер может создать временную таблицу
первоначально как таблицу в памяти, затем преобразовать это в дисковую таблицу, если это становится слишком
большим. У пользователей нет никакого прямого управления, когда сервер создает внутреннюю временную таблицу или
который механизм хранения использование сервера, чтобы управлять этим.
Временные таблицы могут быть созданы при условиях, таких как они:
Если есть ORDER BY
пункт и различное GROUP BY
пункт, или если ORDER BY
или GROUP BY
содержит столбцы от таблиц кроме первой таблицы в очереди
соединения, временная таблица создается.
DISTINCT
объединенный с ORDER
BY
может потребовать временной таблицы.
Если Вы используете SQL_SMALL_RESULT
опция, MySQL
использует временную таблицу в памяти, если запрос также не содержит элементы (описал позже), которые
требуют дискового хранения.
Полученные таблицы (подзапрашивает в FROM
пункт).
Таблицы, составленные для подзапроса или материализации полуобъединения.
Чтобы определить, требует ли запрос временной таблицы, использовать 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
переменная состояния.