码迷,mamicode.com
首页 > 其他好文 > 详细

何时产生临时表?

时间:2014-08-22 10:33:05      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:des   style   http   color   使用   io   数据   ar   

我们在执行某些SQL语句的时候有可能会生成临时表.我们应该尽量的去避免临时表.因为临时表会浪费内存和时间.那么什么情况下会产生临时表呢?

PowerBet
If there is an ORDER BY clause and a different GROUP BY clause, or if the ORDER BY or GROUP BY contains columns from tables other than the first table in the join queue, a temporary table is created.
ORDER BY 子句和一个不一样的 GROUP BY 子句 或者 ORDER BY 子句和一个不一样的 GROUP BY 子句,或者 ORDER BY 或 GROUP BY 的列不是来自JOIN语句序列的第一个表,就会产生临时表.

个人测试后结论 :
  1. 如果GROUP BY 的列没有索引,产生临时表.
  2. 如果GROUP BY时,SELECT的列不止GROUP BY列一个,产生临时表.

  3. 如果GROUP BY的列有索引,ORDER BY的列没索引.产生临时表.
  4. 如果GROUP BY的列和ORDER BY的列不一样,即使都有索引也会产生临时表.
  5. 如果GROUP BY或ORDER BY的列不是来自JOIN语句第一个表.会产生临时表.


DISTINCT combined with ORDER BY may require a temporary table.

DISTINCT 和 ORDER BY 一起使用时可能需要临时表
个人测试后结论 :
  1. 如果DISTINCT 和 ORDER BY的列没有索引,产生临时表.


If you use the SQL_SMALL_RESULT option, MySQL uses an in-memory temporary table, unless the query also contains elements (described later) that require on-disk storage.[官方说明]
用了 SQL_SMALL_RESULT, mysql就会用内存临时表。
个人测试后结论 :
  1. 从来没用过这个,反正没生成.

最后再说一下filesort.

filesort 这个名字取得太搓逼了。 filesort的意思是只要一个排序无法使用索引来排序,就叫filesort。他和file没半毛钱关系。filesort应该叫做sort。意思是说如果无法用已有index来排序,那么就需要数据库服务器额外的进行数据排序,这样其实是会增加性能开销的。

何时产生临时表?,布布扣,bubuko.com

何时产生临时表?

标签:des   style   http   color   使用   io   数据   ar   

原文地址:http://www.cnblogs.com/laoyangman/p/3928560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!