English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Краткое обсуждение временных таблиц и производных таблиц в MySQL

О производных таблицах

Когда в главном запросе содержится производная таблица, или когда в операторе SELECT содержится предложение UNION, или когда в операторе SELECT содержится предложение ORDER BY для одного поля (и предложение GROUP BY для другого поля), MySQL автоматически создает временные таблицы для хранения временных результатов запроса, эти временные таблицы создаются и обслуживаются MySQL, и становятся автоматическими временными таблицами. Для автоматически созданных временных таблиц, так как производительность памяти временных таблиц лучше, MySQL всегда сначала использует временные таблицы в памяти, а когда временные таблицы в памяти становятся слишком большими, достигая某个 порога, они сохраняются во внешнюю память временные таблицы. То есть, внешние временные таблицы являются расширением временных таблиц в памяти. Порог сохранения временных таблиц в внешнюю память определяется минимальным значением переменных системы max_heap_table_size и tmp_table_size.

Производные таблицы обычно используются в подзапросах FROM. Например:

select * from (select * from table) as t;

О временных таблицах

Когда вы работаете с очень большими таблицами, иногда вам может потребоваться выполнять множество запросов, чтобы получить малую подмножество данных, а не выполнять эти запросы на всю таблицу, лучше использовать MySQL для нахождения необходимых нескольких записей, выборку этих записей в временную таблицу может быть быстрее, а затем выполнять запросы на этих таблицах.

Создание временной таблицы легко, добавьте ключевое слово TEMPORARY к стандартному оператору CREATE TABLE:

Создание временной таблицы tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
)

Временная таблица существует в течение всего времени вашего подключения к MySQL. Когда вы разрываете соединение, MySQL автоматически удаляет таблицу и освобождает занятые ресурсы. Конечно, вы можете удалить таблицу и освободить ресурсы, оставаясь подключенным.

DROP TABLE tmp_table

Если при создании временной таблицы с именем tmp_table таблица с таким именем уже существует в базе данных, временная таблица должна быть скрыта (скрыта) от не временной таблицы tmp_table.

Если вы объявите временную таблицу как таблицу HEAP, MySQL также позволяет вам создать ее в памяти:

Создание временной таблицы tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
) ТИП = HEAP

Поскольку таблицы HEAP хранятся в памяти, ваши запросы к ним могут быть быстрее, чем к временным таблицам на диске. Однако, таблицы HEAP отличаются от обычных таблиц и имеют свои ограничения. См. справочник MySQL для получения дополнительной информации.

Как и было рекомендовано ранее, вы должны протестировать временные таблицы, чтобы проверить, действительно ли они быстрее, чем выполнение запросов на больших объемах данных в базе данных. Если данные хорошо индексированы, временные таблицы могут быть не такими быстрыми.

1. После разрыва соединения с MySQL временные таблицы будут автоматически удалены из системы, но это ограничивается таблицами, созданными следующим образом:

Определение полей:

Создание временной таблицы tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
)

2) напрямую импортировать результаты запроса в временную таблицу

Создание временной таблицы tmp_table SELECT * FROM table_name

2. Кроме того, MySQL также позволяет вам напрямую создавать временные таблицы в памяти, так как они хранятся в памяти, они будут очень быстры, синтаксис следующий:

Создание временной таблицы tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
) ТИП = HEAP

3. Из анализа выше можно看出, данные временных таблиц будут очищены, если вы разорвите соединение, но в вашем программном обеспечении не может быть каждого выполнения SQL, чтобы подключиться к базе данных (если бы это было так, то у вас могли бы возникнуть проблемы, которые вы担心, если нет, то нет проблем), потому что данные временных таблиц будут очищены только при разрыве соединения с базой данных, и система не будет автоматически очищать данные временных таблиц при многократном выполнении SQL в одном соединении с базой данных.

Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями Интернета, загружен самостоятельно, сайт не имеет права собственности, не был отредактирован вручную и не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите контент,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @), и предоставьте соответствующие доказательства. Если будет установлено, что контент нарушает права на интеллектуальную собственность, сайт немедленно удалят涉嫌侵权的内容。

Основной учебник
Вам может понравиться