创建临时表时,我没有一个好的方法来估计它会占用多少空间,所以有时会运行类似的查询
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,如果这会影响答案。