Как заставить mysql записывать временные таблицы на диск, а не в память для конкретного запроса?

Я знаю, что есть способ заставить MySQL записывать все временные таблицы на диск, а не в память, установив для больших таблиц значение 1 (https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_big_tables), но мне нужно такое поведение для конкретного запроса. Неважно, вернет ли он небольшое количество строк или большое количество строк. Я хочу, чтобы MySQL записал его на диск. Есть ли обходной путь для этого? В частности, я хочу использовать эту таблицу позже как таблицу кеширования.

0
0
272
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте модификатор SQL_BIG_RESULT

SQL_BIG_RESULT or SQL_SMALL_RESULT can be used with GROUP BY or DISTINCT to tell the optimizer that the result set has many rows or is small, respectively. For SQL_BIG_RESULT, MySQL directly uses disk-based temporary tables if they are created, and prefers sorting to using a temporary table with a key on the GROUP BY elements. For SQL_SMALL_RESULT, MySQL uses in-memory temporary tables to store the resulting table instead of using sorting. This should not normally be needed. https://dev.mysql.com/doc/refman/5.7/en/select.html

когда я использую этот модификатор, это кажется быстрым, но профилирование phpmyadmin не сообщало о записи в кеш-диск, даже не сообщало о записи временного кеша. есть ли у вас какое-либо представление о проблеме системы профилирования phpmyadmin?

Shahadat Hossain Khan 10.09.2018 11:10

когда я не использовал этот модификатор phpmyadmin report «Копирование в таблицу Tmp» и «Копирование в таблицу Tmp на диск», но когда я использую этот модификатор, эти два значения отчета не появлялись. но результат кажется быстрым, чем раньше.

Shahadat Hossain Khan 10.09.2018 11:32

Вы можете установить системные переменные для каждой сессии. Образец:

mysql> SET SESSION big_tables = On;
Query OK, 0 rows affected (0.00 sec);

Другие вопросы по теме