【MySQL】查询使用临时表
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】查询使用临时表的更多相关文章
- mysql查询性能优化
mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...
- MySQL查询缓存
MySQL查询缓存 用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析.优化和执行等阶段. 如何检查缓存? MySQL保存结果于缓存中: 把SELECT语句本身做h ...
- mysql查询表里的重复数据方法:
INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test ...
- Limit参数优化MySQL查询的方法
在做一些查询时,总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的.那么,在mysql中有那些方式是可以避免全表扫面?除了通过使用索引列或分区等方式来进行 ...
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- MySQL · 引擎特性 · 临时表那些事儿
前言 相比于普通的用户数据表,MySQL/InnoDB中的临时表,大家应该会陌生很多.再加上不同的临时表创建的时机和创建的位置都不固定,这也进一步加大神秘感.最让人捉摸不透的是,临时表很多时候会先创建 ...
- MySQL查询性能优化(精)
MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下 ...
- mysql视图和临时表的区别
视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...
- MySQL查询不使用索引汇总 + 如何优化sql语句
不使用索引原文 : http://itlab.idcquan.com/linux/MYSQL/918330.html MySQL查询不使用索引汇总 众所周知,增加索引是提高查询速度的有效途径,但是很多 ...
随机推荐
- Spark RDDRelation
package main.asiainfo.coc.sparksql import org.apache.spark.sql.SQLContext import org.apache.spark.{S ...
- PLSQL_基础系列08_操作符标LPAD / TRUNC / DECODE / TRIM / INSTR(案例)
2014-12-09 Created By BaoXinjian
- OAF_EO系列3 - Initialize详解和实现(案例)
2014-06-14 Created By BaoXinjian
- Codeforces Round #365 (Div. 2) Mishka and trip
Mishka and trip 题意: 有n个城市,第i个城市与第i+1个城市相连,他们边的权值等于i的美丽度*i+1的美丽度,有k个首都城市,一个首都城市与每个城市都相连,求所有边的权值. 题解: ...
- 系统yum源更新及某些软件官方源安装
一.缘由 想在centos6.6上安装zabbix-agent,可是yum search 之后没有,又不想二进制安装,所以就找各种在线安装方法. 二.解决办法 思路: 1.尝试更新对应版本最新的yum ...
- Guava 12-数学运算
范例 int logFloor = LongMath.log2(n, FLOOR); int mustNotOverflow = IntMath.checkedMultiply(x, y); long ...
- java生成验证码图片
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...
- Replace JSON.NET with ServiceStack.Text in ASP.NET Web API
Because ServiceStack.Text performs much better I recently stumbled across a comparison of JSON seria ...
- C++学习30 重载++和--(自增自减运算符)
自增“++”和自减“--”都是一元运算符,它的前置形式和后置形式都可以被重载.请看下面的例子: #include <iostream> #include <iomanip> u ...
- clone代码
例子1: