最佳答案
除了在基本SQL查询中查询较少的行数外,无法直接限制临时表的大小.
您能否更具体地了解您所看到的错误? MySQL临时表可以在内存中存在,直到tmp_table_size
和max_heap_table_size
中的较小者.如果临时表较大,MysqL会将其转换为磁盘上的临时表.
这将使临时表比内存存储慢很多,但除非you have no space available in your temp directory,否则不会导致错误.
除临时表存储外,还有很多ways MySQL uses memory.您可以调整其中许多变量,但这与对查询使用的内存设置限制不同.
错误1114表示您的空间不足.如果它是磁盘上的InnoDB表,这可能意味着您有一个ibdata1文件没有为表空间定义autoextend.对于内存表,这意味着您达到了max_heap_table_size的限制.
由于您无法更改max_heap_table_size,因此您可以选择减少一次放入表中的行数,或者使用磁盘上的临时表而不是内存.
使用MysqL主要版本的最新版本也要小心.我发现bug 18160报告MysqL计算表大小不正确的堆表(用于内存临时表).因此,例如,确保您至少使用MysqL 5.0.23或5.1.10来获取该错误的修复程序.