如何强制MySQL将临时表写在磁盘上而不是内存中以进行特定查询?

时间:2018-09-10 06:03:47

标签: mysql

我知道有一种方法可以通过将大表设置为1(https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_big_tables来强制MySQL将所有临时表写入磁盘而不是内存中,但是我希望这种行为适用于特定查询。天气返回少量的行或大量的行。我希望MySQL将其写入磁盘。有什么解决方法可以做到这一点?更具体地说,我想稍后将该表用作缓存表。

2 个答案:

答案 0 :(得分:1)

使用SQL_BIG_RESULT修饰符

  

SQL_BIG_RESULT或SQL_SMALL_RESULT可以与GROUP BY或   DISTINCT告诉优化器结果集有很多行或   小分别。对于SQL_BIG_RESULT,MySQL直接使用   基于磁盘的临时表(如果已创建),并且倾向于排序   使用带有GROUP BY元素上的键的临时表。对于   SQL_SMALL_RESULT,MySQL使用内存中的临时表存储   结果表,而不是使用排序。通常不应该这样   需要。   https://dev.mysql.com/doc/refman/5.7/en/select.html

答案 1 :(得分:0)

您可以设置每个会话的系统变量。 样本:

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