简介
在mysql里面,join_buffer,sort_buffer,内部临时表这3个都是在执行sql时暂存数据用的。前面2个前面文章都有介绍,本文主要介绍内部临时表。
union
(select 1000 as f) union (select id from t1 order by id desc limit 2);
比如这个sql,就是用到了内部临时表。这个sql就是查询2个子查询的并集,去重,若是不要去重,则是union all。
这个语句的操作流程是先创建一个临时表把第一个子查询的数据丢进去,然后再把第二个查询的数据丢进去。如果用union all则不涉及到去重,那么就不会创建临时表,只是直接拼装结果返回。
group by
1.select id%10 as m, count(*) as c from t1 group by m;
其操作流程为,先创建一个内部临时表,存放2个字段,m,c然后遍历主键,将计算出来的值丢到m,判断是否存在,若存在则+1,然后输出。
大小参数
默认16m,由这个参数tmp_table_size确认。
优化
select SQL_BIG_RESULT id%100 as m, count(*) as c from t1 group by m;
如此,可以直接省去其中某些步骤,这是针对数据量大的情况直接执行走磁盘临时表。