解释一: These are the following conditions under which temporary tables are created. 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…
一.什么是Using temporary ; Using filesort 1. using filesort filesort主要用于查询数据结果集的排序操作,首先MySQL会使用sort_buffer_size大小的内存进行排序,如果结果集超过了sort_buffer_size大小,会把这一个排序后的chunk转移到file上,最后使用多路归并排序完成所有数据的排序操作. MySQL filesort有两种使用模式: 模式1: sort的item保存了所需要的所有字段,排序完成后,没有必要再…
优化GROUP BY语句   默认情况下,MySQL对所有GROUP BY col1,col2...的字段进行排序.这与在查询中指定ORDER BY col1,col2...类似.因此,如果显式包括一个包含相同的列的ORDER BY子句,则对MySQL的实际执行性能没有什么影响. 如果查询包括GROUP BY 但用户想要避免排序结果的消耗,则可以指定ORDER By NULL禁止排序,例如:explain select id, sum(moneys) from sales2 group by i…
遇到一个SQL执行很慢 SQL 如下: SELECT ... FROM tableA WHERE time >= 1492044535 and time <= 1492046335 GROUP by time, sourceName, serverSite,clientSite; SELECT 部分忽略没写,是因为通常SQL执行慢不会跟这部分有关系,至少我没见过. 该语句非常简单,但是执行太慢.所以我们看一下执行计划 执行计划有几个字段我们比较关注: type:range possible_k…
先看一段sql: <span style="font-size:18px;">SELECT * FROM rank_user AS rankUser LEFT JOIN rank_user_level AS userLevel ON rankUser.id = userLevel.user_id LEFT JOIN rank_product AS product ON userLevel.new_level = product.level_id LEFT JOIN rank…
HOW MYSQL USES INTERNAL TEMPORARY TABLES Table of Contents [hide] 1)UNION queries 2)Some views 3)SQL_SMALL_RESULT 4) Multiple-table UPDATE 5)Derived tables 6)subquery or semi-join 7)order by,group by,distinct 通过阅读MySQL的官方手册,我们可以知道出现下面情况的时候,MySQL可能会使用…
前几天统计一个sql,是一个人提交了多少工单,顺便做了相关sql优化.数据大概2000多w. ) c order by c desc; 为了实验最少受其他因素干扰,将生产库的200多w数据导出来,用测试服务器进行测试. 导出来的数据是一个堆表,没有主键,没有索引. mysql> show index from WorkOrder; 查询index方法1 Empty set (0.00 sec) mysql> show keys from WorkOrder; 查询index方法2 Empty…
前几天统计一个sql,是一个人提交了多少工单,顺便做了相关sql优化.数据大概2000多w. select CustName,count(1) c from WorkOrder where CreateDate>'2016-5-1' and CreateDate<'2017-1-1'group by CustName having c>100 order by c desc; 为了实验最少受其他因素干扰,将生产库的200多w数据导出来,用测试服务器进行测试. 导出来的数据是一个堆表,没有…
写在前面的话: 不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程: 不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小: 但把mysql客户端(如SQLyog,如HeidiSQL)放在桌面上,时不时拿出来 explain 一把,这是一种美德! 在实例讲解之前,我们先回顾一下联表查询的基础知识. ——联表查询的基础知识—— 引子:为什么第一个查询using temporary,第二个查询不用临时表呢? 下面两个查询,它们…
mysql有两种方式可以生成有序的结果,通过排序操作或者按照索引顺序扫描,如果explain的type列的值为index,则说明mysql使用了索引扫描来做排序(不要和extra列的Using index搞混了,那个是使用了覆盖索引查询).扫描索引本身是很快的,因为只需要从一条索引记录移动到紧接着的下一条记录,但如果索引不能覆盖查询所需的全部列,那就不得不扫描一条索引记录就回表查询一次对应的整行,这基本上都是随机IO,因此按索引顺序读取数据的速度通常要比顺序地全表扫描慢,尤其是在IO密集型的工作…