union 执行流程
(select 1000 as f) union (select id from t1 order by id desc limit 2);
key=PRIMARY,说明第二个子句用到了索引 id。 Extra 字段,表示在对子查询的结果集做 union 的时候,使用了临时表 (Using temporary)。
执行流程
- 创建一个内存临时表,这个临时表只有一个整型字段 f,并且 f 是主键字段。
- 执行第一个子查询,得到 1000 这个值,并存入临时表中。
- 执行第二个子查询:
- 拿到第一行 id=1000,试图插入临时表中。但由于 1000 这个值已经存在于临时表了,违反了唯一性约束,所以插入失败,然后继续执行;
- 取到第二行 id=999,插入临时表成功。 从临时表中按行取出数据,