mysql - 如何强制 MySQL 在磁盘上而不是在内存中写入临时表以进行特定查询?
问题描述
我知道有一种方法可以通过将 big-tables 设置为 1 来强制 MySQL 将所有临时表写入磁盘而不是内存中(https://dev.mysql.com/doc/refman/5.6/en/server-system- variables.html#sysvar_big_tables)但我希望这种行为用于特定查询。天气它返回少量的行或大量的行。我希望 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
推荐阅读
- javascript - 如何根据状态更改 className 并在功能组件中重新渲染
- angular - 使用特定的谷歌帐户登录时,Angular 7 应用程序不断使浏览器崩溃。有谁知道如何修理它?
- php - 您的连接不是私有的 试图打开我的网站而不把 www 放在前面时出错
- flutter - 如何在flutter Curvednavigationbar中导航不同的页面?
- azure - 如何使用应用注册和 azure cli 命令获取所有 azure 应用注册并查看机密的到期日期?
- python - PyQt5 导入错误:未定义符号:_ZNSt12out_of_rangeC1EPKc,versionQt_5
- javascript - 通过页面链接将页面重定向添加到所选文本
- javascript - 如何输出包含每个并且具有相同的ID
- google-chrome-extension - 是否可以在 devtools 或 inspectedwindows 中访问 Web 串行端口?
- opencv - OpenCV:“相机校准”为什么非平面校准装置需要初步猜测?