gpt4 book ai didi

mysql - 如果临时内存表已满,MySQL 可以回退到另一种表类型吗?

转载 作者:行者123 更新时间:2023-11-29 08:27:54 25 4
gpt4 key购买 nike

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

CREATE TEMPORARY TABLE t_temp ENGINE=MEMORY
SELECT t.*
FROM `table_name` t
WHERE t.`column` = 'a';

导致错误“表‘t_temp’已满”。我意识到您可以调整 max_heap_table_size 和 tmp_table_size 以允许更大的表,但这不是一个很好的选择,因为这些表可能会变得非常大。

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

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

最佳答案

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

恕我直言,可能有比摆弄条件内存表更好的方法来优化系统。如果我是你,我只会从你的代码中取出 ENGINE=MEMORY 并继续处理下一个问题。 MySQL 在缓存表以及将其拥有的 RAM 与其他存储引擎有效地结合使用方面非常出色。

关于mysql - 如果临时内存表已满,MySQL 可以回退到另一种表类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17458882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com