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