首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

线上的某个SQL语句的执行计划分析​

,这个表是使用了ABC为顺序的联合索引,然后查看这个表的执行计划,如下(为了方便说明,我们设计了一个简易的表来替代): mysql 22:28:02>>create table tbl_name(a int...,MySQL很有可能寻求通过建立内部的临时表来执行查询。...如果查询中使用到了内部的临时表,在执行计划的Extra列将会显示Using temporary提示。 到这里就能解释为什么会用到临时表了。...这里我们注意到,查询计划中还有一个using filesort的关键字,我们的SQL看起来并没有执行order by的语句,为什么会出现filesort的语句呢?...其实这个问题的本质还是由于mysql帮我们做了优化,默认按照分组的字段进行排序,如果我们不想要这个排序的功能,可以使用null来显示的禁止掉这个功能,如下: mysql 22:29:57>>explain

48730

MySQL的查询优化(二)

“ 在昨天的MySQL的查询优化(一)中,我们谈到SQL常用的一些优化方式:给字段增加索引,避免索引失效,替换掉一些不合理的关键词,那么今天我们继续来看SQL如何进行查询优化” 在上一章第一条优化中我们说到在...如果order by用的多了我想ground by你也会用到。但是你用的方式对吗? 语句分析 一.order by 对于order by大家都不陌生,但是为什么使用order by之后查询会变慢呢?...Extra除了我们上面说的Using filesort还多来Using temporary。Using temporary表明这条语句使用了临时表。使用临时表会消耗更多的内存,降低查询的效率。...三.优化数据库结构 由于个人方向的问题,对于SQL语句的查询优化,自己并不是很精通,只能说遇到加载很慢的时候,我会去排除原因,如果原因出在SQL的问题上面的时候(大多数我觉得都是这上面),我回去看这个请求执行了哪些...SQL,如果开启了慢查询就去看慢查询日志,如果没有,把打印的SQL放到工具上执行一下,然后使用explain去看一下SQL的执行计划,最后再进行优化,当然最后的优化才是最重要的。

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    看一遍就理解:order by详解!

    前言 日常开发中,我们经常会使用到order by,亲爱的小伙伴,你是否知道order by 的工作原理呢?order by的优化思路是怎样的呢?使用order by有哪些注意的问题呢?...执行计划的key这个字段,表示使用到索引idx_city Extra 这个字段的 Using index condition 表示索引条件 Extra 这个字段的 Using filesort表示用到排序...小伙伴们可能会有个疑问,既然sort_buffer放不下,就需要用到临时磁盘文件,这会影响排序效率。那为什么还要把排序不相关的字段(name,city)放到sort_buffer中呢?...一般情况下,排序字段不会超过这个值,也就是都会走全字段排序。 order by的一些优化思路 我们如何优化order by语句呢? 因为数据是无序的,所以就需要排序。...可以发现,加上idx_city_age联合索引,就不需要Using filesort排序了。为什么呢?因为索引本身是有序的,我们可以看下idx_city_age联合索引示意图,如下: ?

    1.3K20

    MYSQL中使用order by…limit时候遇到的坑

    文章,是关于MYSQL和MariaDB在处理order by 排序的差异; 最近遇到这样的一个奇怪的问题——SQL中排序分页的查询结果中出现了重复数据。...所以我们可以确定这个SQL执行时是会找到limit要求的行后立马返回查询结果的。 不过就算它立马返回,为什么分页会不准呢?...在ORDER BY + LIMIT的查询语句中,如果ORDER BY不能使用索引的话,优化器可能会使用in-memory sort操作。...但或许你仍然心存疑问,MySQL针对此语句到底进行了怎样的优化,到底是否使用了堆排序算法?...也就是说,In memory filesort使用了优先级队列,而优先级队列的原理就是二叉堆。 下面我们验证一下,真实的查询中是否使用了优先级队列。怎么看呢?

    1.1K10

    mysql explain ref const_MySQL EXPLAIN 详解「建议收藏」

    一 .介绍 EXPLAIN 命令用于SQL语句的查询执行计划。这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的。...七. key : 该key 列指出mysql优化器决定选择使用哪个索引来优化对该表的访问。一般来说SQL查询中的每个表都只会使用一个索引。...这个数字是内嵌循环关联计划里的循环数目,也就是说它不是mysql认为它最终要从表里读取出来的行数,而是mysql为了找到符合查询的每一点上标准的那些行而必须读取的行的平均数。...rows 列提供了试图分析所有存在于累计结果集中的行数目的MySQL 优化器估计值。执行计划很容易描述这个很困难的统计量。...因为如果有GROUP BY子句,或者如果GROUP BY中的字段都来自其他的表而非连接顺序中的第一个表的话,就会创建一个临时表了。 那么如何解决呢?

    1K40

    MySQL SQL优化:充分理解Using filesort,提升查询性能

    因此,对于SQL查询的优化和性能提升成为了开发者们需要解决的关键问题。在MySQL中,Using filesort是一个常见的查询执行计划的操作,它用于对查询结果进行排序。...当MySQL优化器决定使用Using filesort时,它会在内存或者磁盘上创建一个临时文件,将查询结果写入该临时文件,并进行排序操作。最后,将排序后的结果返回给用户。...对于大数据集或者排序字段取值分布不均匀的情况,使用覆盖索引可以进一步提升查询性能。查询优化器的作用MySQL的查询优化器扮演着关键的角色,它会根据查询条件和表结构等信息,自动选择最佳的查询执行计划。...覆盖索引:尽可能使用覆盖索引,即索引包含了所有查询所需的字段,避免Using filesort的使用。手动干预查询执行计划:在某些情况下,查询优化器不一定能够选择最佳的执行计划。...选择合适的排序字段、优化数据分布和排序结果、合理选择索引类型以及手动干预查询执行计划等手段,都可以帮助我们最大程度地减少Using filesort的使用,提高查询性能。

    3.6K10

    一次关于 Mysql 索引优化的思考

    查看系统性能监控,发现有十多条慢查询,决定将其优化。挑选其中一条典型Sql记录其优化历程。 1.概述 在下文的查询优化中,主要围绕的问题:Mysql为何会选错索引?...那么这里开始疑惑了,Mysql优化器为何会选错索引?继续探究。 Mysql优化器会根据 ①扫描行数、②是否使用临时表、③是否排序等因素进行综合判断。...明显是idx_classify_time更少,为何没有选它呢? 其实这里,优化器认为他们俩的行数是差不多的,没有本质的差别。而在执行计划中,有个参数却差别很大:type。...而且idx_channel_source_id的 key_len更小,这样的话,一页中可以扫描更多行数。 2.2,解决方案 既然Mysql优化器选错了索引,我们如何去纠正它呢?...从查询流程可以看出,使用普通索引需要多扫描一次索引树。而这个过程,称为 回表。 2.2.2 覆盖索引 那么如果能够减少回表的次数,会很大程度地提升性能,这里就用到了联合索引。

    33620

    MySQL - order by 出现 using filesort根因分析及优化

    filesort 步骤 此时就是真正的文件排序了,也就是磁盘的临时文件,MySQL会采用归并排序的思想,把要排序的数据分成若干份,每一份数据在内存中排序后会放入临时文件中,最终对这些已经排序好的临时文件的数据再做一次合并排序就...看完了上面的排序流程 , 如果要排序的数据很大,超过 sort_buffer 的大小,那么就需要文件排序,文件排序涉及到分批排序与合并,很耗时。 为什么呢?...有几点需要注意的: 需要两次回表 sort_buffer 虽然小了,但是如果数据量本身还是很大,应该还是要临时文件排序的\ MySQL 该如何选择?...看看执行计划吧 小结 对于 order by 没有用到索引的时候,这时 explain 中 Extra 字段大概是会出现 using filesort 字眼 出现 using filesort 的时候也不用太慌张...MySQL 优化器决定的 如果查询的字段很多,想要尽量避免使用临时文件排序,可以尝试设置下 max_length_for_sort_data 字段的大小,让其小于所有查询字段长度的总和,这样放入或许可以避免

    6.4K10

    SQL优化思路+经典案例分析

    当explain与SQL一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。即MySQL解释了它将如何处理该语句,包括有关如何连接表以及以何种顺序连接表等信息。...1.2.4 extra 该字段包含有关MySQL如何解析查询的其他信息,它一般会出现这几个值: Using filesort:表示按文件排序,一般是在指定的排序和索引排序不一致的情况才会出现。...1.4 Optimizer Trace分析详情 profile只能查看到SQL的执行耗时,但是无法看到SQL真正执行的过程信息,即不知道MySQL优化器是如何选择执行计划。...表示在执行分组的时候使用了临时表 Extra 这个字段的Using filesort表示使用了文件排序 group by是怎么使用到临时表和排序了呢?...如果数据量很大,很可能这个查询需要的磁盘临时表,就会占用大量的磁盘空间。 2.9.3 如何优化group by呢 从哪些方向去优化呢? 方向1:既然它默认会排序,我们不给它排是不是就行啦。

    91410

    SQL优化指南

    :使用了外部文件排序 只要见到这个 就要优化掉     Using temporary:创建了临时表来处理查询 只要见到这个 也要尽量优化掉 优化争议无数的count() 统计列与统计行?   ...filesort的优化   了解了MySQL排序的方式,优化目标就清晰了:尽量减少额外的排序,通过索引直接返回有序数据。where条件和order by使用相同的索引。   ...当然 这不是绝对的,比如某些非常简单的子查询就比关联查询效率高,事实效果如何还要看执行计划。   只能说大部分的子查询都可以优化成Join关联查询。...改变执行计划 提高索引优先级 use index 可以让MySQL去参考指定的索引,但是无法强制MySQL去使用这个索引,当MySQL觉得这个索引效率太差,它宁愿去走全表扫描。。。...2.查看select的查询类型。   3.实际有没有使用索引。   4.Extra描述信息 PS:一定要养成查看执行计划的习惯,这个习惯非常重要。

    80020

    SQL优化指南

    :使用了外部文件排序 只要见到这个 就要优化掉 Using temporary:创建了临时表来处理查询 只要见到这个 也要尽量优化掉 三、优化争议无数的count( ) 统计列与统计行...filesort的优化 了解了MySQL排序的方式,优化目标就清晰了:尽量减少额外的排序,通过索引直接返回有序数据。where条件和order by使用相同的索引。...当然 这不是绝对的,比如某些非常简单的子查询就比关联查询效率高,事实效果如何还要看执行计划。 只能说大部分的子查询都可以优化成Join关联查询。...八、改变执行计划 提高索引优先级 use index 可以让MySQL去参考指定的索引,但是无法强制MySQL去使用这个索引,当MySQL觉得这个索引效率太差,它宁愿去走全表扫描。。。...查看select的查询类型。 实际有没有使用索引。 Extra描述信息 PS:一定要养成查看执行计划的习惯,这个习惯非常重要。

    85320

    俗话:MySQL索引

    虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。...本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化慢查询。...并且兴致冲冲的找到了我,“这个SQL需要优化,给我把每个字段都加上索引” 我很惊讶,问道“为什么需要每个字段都加上索引?”...2.2 MySQL 需要使用Using temporary 临时表来filesort 如果order by的子句只引用了联接中的第一个表,MySQL会先对第一个表进行排序,然后进行联接...优化Filesort 当无法避免排序操作时,又该如何来优化呢?很显然,应该尽可能让 MySQL 选择使用第二种单路算法来进行排序。这样可以减少大量的随机IO操作,很大幅度地提高排序工作的效率。 1.

    53030

    MySQL十二:索引分析

    转载~ 数据库优化是一个很常见的面试题,下面就针对这一问题详细聊聊如何进行索引与sql的分析与优化。...一、执行计划(EXPLAIN) MySQL 提供了一个 EXPLAIN 命令,它「可以对 sql语句进行分析,并输出sql执行的详细信息」,可以让我们有针对性的优化。...1.1执行计划详解 「在使用索引的时候首先应该学会分析SQL的执行,使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,可以知道MySQL是如何处理SQL语句」。...,把查询 1 和查询 2 的结果集都合并到这个临时表中,利用唯一键进行去重,这种情况下查询 id 就为 NULL」。...如果Explain分析SQL时Extra属性显示Using filesort,表示使用了filesort排序方式,需要优化。

    1.4K20

    MySQL优化看这篇就对了

    我们在面试的时候经常被问到你如何对数据库优化?动不动就分库分表,但是实际上有几个有分库分表的经验呢?下面我们将介绍优化数据库的各个阶段。...1.通过慢查询日志,找到我们的慢sql 2.通过EXPLAIN分析执行计划,使用索引。...只要见到这个 就要优化掉 © Using temporary:创建了临时表来处理查询 只要见到这个 也要尽量优化掉 SQL执行顺序 不是绝对的有时候,优化器也会执行where过滤些数据在join 优化争议无数的...)和其他存储引擎就没有什么不同了 优化filesort 当我们使用order by进行排序的时候可能会出现Using filesort,这个时候我们就要将这个优化掉 mysql排序方式有2种 © 直接通过有序索引返回数据...为什么呢? 这第二条是因为我们这个是非聚集索引,扫描完索引之后还需要,根据id去随机读取磁盘(10000次) 而随机读取的性能是很差的。

    32010

    【MySQL系列】- MySQL执行计划一览

    什么是执行计划 根据表、列、索引和WHERE子句中的条件的详细信息,MySQL优化器考虑了许多技术来有效地执行SQL查询中涉及的查找。...执行计划能做什么 通过执行计划我们可以知道MySQL 是如何处理你的 SQL 语句的。...有子查询的语句id可能相同也可能不同 为什么有可能相同也有可能不同的,那是因为查询优化器觉得这条包含子查询的语句可以使用连接查询进行优化, 就会对这条语句进行重写为连接查询,所以想知道查询优化器是否重写了查询语句...mysql是在其内部创建了临时表进行去重,这里可以看到表名是其中,M、N分别代表两张表执行计划的id,第三行的id为NULL表明这个临时表是为了合并数据去重所创建的。...如果某个查询需要使用文件排序的方式执行查询,就会在执行计划的Extra列中显示Using filesort。

    76420

    group by的工作原理和优化思路

    使用group by的简单例子 group by 工作原理 group by + where 和 having的区别 group by 优化思路 group by 使用注意点 一个生产慢SQL如何优化...city; Extra 这个字段的Using temporary表示在执行分组的时候使用了临时表 Extra 这个字段的Using filesort表示使用了排序 group by 怎么就使用到临时表和排序了呢...如果数据量很大,很可能这个查询需要的磁盘临时表,就会占用大量的磁盘空间。 这些都是导致慢SQL的x因素,我们一起来探讨优化方案哈。 group by的一些优化方案 从哪些方向去优化呢?...加合适的索引是优化group by最简单有效的优化方式。 order by null 不用排序 并不是所有场景都适合加索引的,如果碰上不适合创建索引的场景,我们如何优化呢?...MySQl优化器发现,磁盘临时表是B+树存储,存储效率不如数组来得高。

    84520

    Mysql进阶优化篇05——子查询的优化和排序优化

    Mysql进阶优化篇01——四万字详解数据库性能分析工具(深入、全面、详细,收藏备用) Mysql进阶优化篇02——索引失效的10种情况及原理 Mysql进阶优化篇03——多表查询的优化 -mysql...进阶优化篇04——深入JOIN语句的底层原理 大厂SQL面试真题大全 文章目录 1.子查询的优化 2 排序优化 2.1 排序优化 2.2 测试 2.3 案例实战 2.4 filesort的算法 1.子查询的优化...原因: 执行子查询时,MySQL 需要为内层查询语句的查询结果建立一个临时表 ,然后外层查询语句从临时表中查询记录。查询完毕后,再撤销这些临时表 。...,但是为什么在 ORDER BY 字段上还要加索引呢?...filesort,这是为什么呢?

    2.3K21
    领券