MySQL查询产生临时表的分析

官网说明的地址:http://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html

参考:http://blog.csdn.net/chenchaoxing/article/details/25214397

In some cases, the server creates internal temporary tables while processing queries. Such a table can be held in memory and processed by the MEMORY storage engine, or stored on disk and processed by the MyISAM storage engine.
The server may create a temporary table initially as an in-memory table, then convert it to an on-disk table if it becomes too large.
Users have no direct control over when the server creates an internal temporary table or which storage engine the server uses to manage it.
在某些情况下,MySQL服务在处理请求时会创建内部临时表,这样被生成的存储在内存中和被处理的临时表是MEMORY存储引擎,异或存储和处理都在磁盘上的临时表为MyISAM存储引擎。
MySQL最开始会先创建一个内存中的临时表(后文统一使用“内存临时表”),如果这个表变大MySQL将内存临时表转换成存储在磁盘上临时表(后文统一使用“磁盘临时表”)。
用户无法直接控制MySQL何时创建内部临时表,也无法选择内部临时表使用哪种存储引擎。
Temporary tables can be created under conditions such as these:
.UNION queries use temporary tables.
.Some views require temporary tables, such those evaluated using the TEMPTABLE algorithm, or that use UNION or aggregation.
.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.
.DISTINCT combined with ORDER BY may require a temporary table.
.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.
.Multiple-table UPDATE statements.
.GROUP_CONCAT() or COUNT(DISTINCT) evaluation.
以下情况MySQL会创建内部临时表:
、使用UNION的会话。
、一些视图需要临时表,例如评估要使用临时表算法,或UNION和聚合过程。
、ORDER BY子句和GROUP BY子句不同(例如:ORDERY BY price GROUP BY name),或者在JOIN查询中,ORDER BY或者GROUP BY使用了不是第一个表的列(例如:SELECT * from TableA, TableB ORDER BY TableA.price GROUP by TableB.name)。
、DISTINCT与ORDER BY一起使用可能会需要临时表。
、SELECT语句中指定了SQL_SMALL_RESULT关键字 SQL_SMALL_RESULT的意思就是告诉MySQL,结果会很小,请直接使用内存临时表,不需要使用索引排序 SQL_SMALL_RESULT必须和GROUP BY、DISTINCT或DISTINCTROW一起使用 一般情况下,我们没有必要使用这个选项,让MySQL服务器选择即可。
、多个表的更新操作。
、GROUP_CONCAT()和COUNT(DISTINCT)。

【MySQL】查询使用临时表的更多相关文章

  1. mysql查询性能优化

    mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...

  2. MySQL查询缓存

    MySQL查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段. 如何检查缓存? MySQL保存结果于缓存中: 把SELECT语句本身做h ...

  3. mysql查询表里的重复数据方法:

    INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test  ...

  4. Limit参数优化MySQL查询的方法

    在做一些查询时,总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的.那么,在mysql中有那些方式是可以避免全表扫面?除了通过使用索引列或分区等方式来进行 ...

  5. MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图

    http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...

  6. MySQL · 引擎特性 · 临时表那些事儿

    前言 相比于普通的用户数据表,MySQL/InnoDB中的临时表,大家应该会陌生很多.再加上不同的临时表创建的时机和创建的位置都不固定,这也进一步加大神秘感.最让人捉摸不透的是,临时表很多时候会先创建 ...

  7. MySQL查询性能优化(精)

    MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下 ...

  8. mysql视图和临时表的区别

    视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...

  9. MySQL查询不使用索引汇总 + 如何优化sql语句

    不使用索引原文 : http://itlab.idcquan.com/linux/MYSQL/918330.html MySQL查询不使用索引汇总 众所周知,增加索引是提高查询速度的有效途径,但是很多 ...

随机推荐

  1. PDF内容不允许复制的解决方法!

    PDF文档的内容不允许复制解决方法! PDF的加密有两个级别: 一个是Owner级别,就是打开文档时需要输入密码PDF Password Remover可以用来破解Owner级别的口令,但是不能用于破 ...

  2. 加密---公钥&密钥

    一直以来对公钥和私钥都理解得不是很透彻,感觉到模棱两可.今天在网上找了半天,通过查看对这个密钥对的理解,总算弄清楚了.      公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与密 ...

  3. 四步轻松实现用Visio画UML类图

    本节和大家一起学习一下用Visio画UML类图的方法,主要有四个步骤,这里和大家分享一下,相信通过本节的学习,你对Visio画UML类图的步骤一定会有所了解. 用Visio画UML类图 对于画类图的工 ...

  4. linux ps命令(转载)

    来源:http://www.cnblogs.com/peida/archive/2012/12/19/2824418.html Linux中的ps命令是Process Status的缩写.ps命令用来 ...

  5. struts (三)

    1. <action name="test" class="com.gc.Test"> <result name="success& ...

  6. [Flex] IFrame系列 —— 在flex的web应用中嵌入html的方法

    在flex的web应用中,我们往往必须有嵌入html的需求,这时候你会发现IFrame很有用! flex而且可以和html中的JavaScript进行交互,flex可以通过iframe调用到html中 ...

  7. android github

    Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassActionBar v7 appcompat library ...

  8. Eclipse Android HH and theme

    一. 汉化方法: 1.Eclipse版本查询:安装目录readme,查版本号;参照查代号如下表: 代号 平台版本 项目 主要版本发行日期 SR1发行日期 SR2发行日期 N/A 3.0 [1] N/A ...

  9. Oracle Cluster Registry Location to be Added is not Accessible

    APPLIES TO: Oracle Server - Enterprise Edition - Version 11.2.0.1 and laterInformation in this docum ...

  10. chrome 修改标签页

    插件名称:New Tab Redirect 标签格式:"file:///home/user/index.html"