首页 > 解决方案 > 如何强制 MySQL 在磁盘上而不是在内存中写入临时表以进行特定查询?

问题描述

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

标签: mysql

解决方案


使用 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


推荐阅读