我们经常看到Mysql的explain语句执行结果Extra字段有using temporary或者using filesort,本文主要是为了理解这两个短语的含义,从而有助于我们进行SQL语句优化。

什么是临时表(temporary table)

顾名思义,临时表也是一张表,只不过不是持久的,当会话结束,临时表就会被删除掉。

什么是文件排序(filesort)

文件排序是相对于索引排序而言的,当不能使用索引生成排序结果的时候,mysql需要进行文件排序,排序可能是在内存中进行的,也可能需要磁盘文件的辅助。当待排序的数据量小于排序缓冲区(sort buffer)的大小时,排序直接在内存中进行,否则就需要磁盘文件的辅助进行排序,无论是哪种情况,mysql并没有进行区分,统一使用filesort来表示。

mysql的关联查询是如何执行的

mysql对所有的关联查询都是通过循环嵌套来执行的。简单的讲,表1位于外层循环,表2位于内层循环,每次首先从外层循环中取出一条数据,然后在内存循环中进行匹配,匹配到的作为结果进行返回。下面的语句及其伪代码表示了实际的执行过程。

1

2

3

4-- 示例语句

SELECT tbl1.col1, tbl2.col2

FROM tbl1 INNER JOIN tbl2 USING(col3)

WHERE tbl1.col1 IN(5,6);

1

2

3

4

5

6

7

8

9

10

11

12-- 示例语句执行伪代码

outer_iter = iterator over tbl1 where col1 IN(5,6)

outer_row = outer_iter.next

while outer_row

inner_iter = iterator over tbl2 where col3 = outer_row.col3

inner_row = inner_iter.next

while inner_row

output [ outer_row.col1, inner_row.col2 ]

inner_row = inner_iter.next

end

outer_row = outer_iter.next

end

关联查询order by执行的两种情况

关联查询中如果有order by排序语句,排序的过程会分为两种情况。

第一种,order by语句中排序的列全部都出现在表1中,那么mysql在关联处理第一个表时就会进行文件排序,也就是在执行关联查询的外层循环时就进行排序,此时,mysql的explain结果中可以看到extra字段会看到using filesort.

第二种,除了第一种情况之外,mysql都会先将关联查询的结果存放到一张临时表中,然后在所有的关联都结束后,再进行文件排序,此时mysql的explain语句的extra字段就会看到using temporary;using filesort.

mysql临时文件和临时表_理解mysql的临时表和文件排序相关推荐

  1. mysql业务数据库回退_理解MySQL数据库事务-隔离性

    Transaction事务是指一个逻辑单元,执行一系列操作的SQL语句. 事务中一组的SQL语句,要么全部执行,要么全部回退.在Oracle数据库中有个名字,叫做transaction ID 在关系型 ...

  2. mysql 数据库被覆盖_理解MySQL数据库覆盖索引

    话说有这么一个表: CREATE TABLE `user_group` ( `id` int(11) NOT NULL auto_increment, `uid` int(11) NOT NULL, ...

  3. mysql连接数过多 原因_理解MySQL数据库连接数过多的原因

    使用MySQL数据库,有一个容易出现的问题--Too many connections.连接数超过max_connections就会报这个错误.MySQL为了在达到最大连接数时也能给DBA有机会操作, ...

  4. 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践

    学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 原文 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 感谢大家在上一篇 学一 ...

  5. mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制

    轻松理解MYSQL MVCC 实现机制 轻松理解MYSQL MVCC 实现机制 #### 1. MVCC简介 ##### 1.1 什么是MVCC MVCC是一种多版本并发控制机制. ##### 1.2 ...

  6. 【MySQL笔记】正确的理解MySQL的MVCC及实现原理

    MVCC多版本并发控制 如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里 !首先声明,MySQL 的测试环境是 5.7 前提概要 什么是 MVCC 什么是当前读和快照读 ...

  7. mysql 存储过程临时表_在MySQL存储过程中创建的临时表的范围

    问题撤销!当我拼写正确的一切,问题消失了! 我有一个MySQL存储过程创建一个临时表.当我从mysql提示符调用过程时,它似乎运行成功,但是如果我从临时表中选择COUNT(*),我会收到一个错误,表示 ...

  8. mysql 存储ts数据_理解性记忆MySQL数据库

    理解性记忆MySQL数据库 1.什么是数据库? 本质是文件存储系统.可以简单理解为存储数据的仓库. 2.为什么要使用数据库? 方便数据管理. 3.什么是数据库管理系统? 管理数据库的软件,比如mysq ...

  9. mysql MDL锁如何解决_理解MySQL的MDL元数据锁

    一.MDL锁的作用 MySQL DBA 对于 Waiting for table metadata lock 肯定不会陌生,一般都是进行 alter 操作时被堵住了,导致了我们在 show proce ...

最新文章

  1. 【每日学习Mybatis中基础】trim标签使用
  2. SEO优化之一步一步诊断网站
  3. WebStorm Vue ElementUI
  4. 页面加载时间如何影响你的收益?
  5. 华三路由交换配置命令_华三路由器交换机配置命令
  6. python随机产生10个随机数_python(random模块)取10以内的随机数
  7. Mac mysql 运行sql文件中文乱码的问题
  8. clickhouse数据类型
  9. 网络安全法学习整理笔记
  10. 怎么更改计算机网上邻居,如何更换登入网上邻居帐号
  11. scrapy 爬虫框架及链家租房信息爬取示例
  12. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用
  13. iOS 打开第三方应用
  14. 高数 | 【无穷级数】证明:绝对收敛一定收敛
  15. 【实验五 一维数组】7-10 sdut-C语言实验-排序问题
  16. 桌面应用程序 架构_关于该架构的全部内容:探索不同的架构模式以及如何在您的应用程序中使用它们
  17. 程序员面临脱发困扰吃什么?
  18. C语言经典例题--打印前五十个素数
  19. noip2003侦探推理详解
  20. ubuntu18.04下设置软件开机自启动

热门文章

  1. python话雷达图-使用Python绘制雷达图
  2. python官网下载步骤64位-Python 3.7 64位下载
  3. python自动化办公都能做什么菜-python接口自动化
  4. 下列不属于python第三方库的是-python后端开发工程师考证试题
  5. python装饰器-python修饰器(装饰器)以及wraps
  6. python免费试听-哈尔滨Python人工智能课程免费试听
  7. 原理分析之一:从JDBC到Mybatis
  8. winform datagridview控件使用
  9. ASP.NET MVC
  10. Codeforces Round #344 (Div. 2)C. Report