关闭

什么是临时表,何时删除临时表?

别叨叨 1年前 ⋅ 199 阅读

MySQL在执行SQL语句的过程中通常会临时创建一些存储中间结果集的表,临时表只对当前连接可见,在连接关闭时,临时表会被删除并释放所有表空间。

临时表分为两种:一种是内存临时表,使用的是Memory存储引擎。一种是磁盘临时表,用的是MyISAM存储引擎。

MySQL会在下面这几种情况产生临时表:

  1. 使用UNION查询:UNION有两种,一种是UNION,一种是UNION ALL,它们都用于联合查询,区别是使用UNION会去掉两个表中的重复数据,相当于对结果集做了一下去重(distinct)。使用UNION ALL,则不会去重,返回所有行。使用UNION查询会去重。
  2. 使用TEMPTABLE算法或者是UNION查询中的视图。TEMPTABLE算法是一种创建临时表的算法,它是将结果放到临时表中,意味着要MySQL先创建好一个临时表,然后将结果放到临时表中,然后再使用这个临时表进行相应查询。
  3. ORDER BY和GROUP BY的子句不一样时也会产生临时表。
  4. DISTINCT查询并且加上ORDER BY时。
  5. SQL中用到SQL SMALL RESULT选项时,如果查询到结果比较小时,可以加上SQL SMALL RESULT来优化,产生临时表。
  6. FROM中的子查询。
  7. EXPLAIN查看执行计划结果的Extra列中,如果使用Using Temporary就表示会用到临时表。

全部评论: 0

    我有话说: