SQL的官方文档,得到了更为权威的官方信息。
临时表创建的条件:
1、如果order by条件和group by的条件不一样,或者order by或group by的不是join队列中的第一个表的字段。
2、DISTINCT联合order by条件的查询。
3、如果使用了SQL_SMALL_RESULT选项,MySQL使用memory临时表,否则,查询询结果需要存储到磁盘。
临时表不使用内存表的原则:
1、表中有BLOB或TEXT类型。
2、group by或distinct条件中的字段大于512个字节。
3、如果使用了UNION或UNION ALL,任何查询列表中的字段大于512个字节。
www.2cto.com
此外,使用内存表最大为tmp_table_size和max_heap_table_size的最小值。如果超过该值,转化为myisam存储引擎存储到磁盘。
参考资料:
1、MySQL源码:MySQL-5.5.20
2、MySQL官方文档:http://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.
html
作者 king_wangheng