首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果临时内存表被填满,MySQL可以回退到另一种表类型吗?

问如果临时内存表被填满,MySQL可以回退到另一种表类型吗?
EN

Stack Overflow用户
提问于 2013-07-04 06:05:31
回答 2查看 111关注 0票数 0

在创建临时表时,我没有一个好的方法来估计它将占用多少空间,所以有时会运行如下查询

代码语言:javascript
复制
CREATE TEMPORARY TABLE t_temp ENGINE=MEMORY
SELECT t.*
FROM `table_name` t
WHERE t.`column` = 'a';

导致错误"The table 't_temp‘is full“。我知道您可以调整max_heap_table_size和tmp_table_size以支持更大的表,但这不是一个很好的选择,因为这些表可能会变得非常大。

理想情况下,我希望它回退到MyISAM表,而不只是出错。有什么方法可以在查询或服务器设置中指定吗?或者,最好的解决方案真的只是观察错误,然后尝试使用不同的表类型再次运行查询吗?这是我能想到的唯一解决方案,除了不使用内存表之外,如果有任何疑问,但它似乎浪费数据库资源,并将创造更多的代码复杂性。

我正在运行MySQL v5.5.27,如果这会影响答案的话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-04 09:03:26

内存引擎就是这样:如果你的RAM用完了,你就完了,除非你想像@eggyal建议的那样开发你自己的存储引擎。

恕我直言,可能有更好的方法来优化您的系统,而不是摆弄条件内存表。如果我是你,我会把ENGINE=MEMORY从你的代码中去掉,然后转到下一个问题。MySQL在缓存表和有效使用其他存储引擎的内存方面做得很好。

票数 2
EN

Stack Overflow用户

发布于 2013-07-04 10:56:45

MySQL集群提供与内存引擎相同的功能和更高的性能级别,并提供内存无法提供的其他功能:

...Optional磁盘后备操作,实现数据持久性。

来源: MySQL 5.5手册。http://dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.html

不确定是否可以将Cluster合并为临时表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17458882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档