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

二十二、查询分析器 EXPLAIN

当 explain 与 SQL 语句一起使用时, MySQL 将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理语句,包括有关如何连接表以及以何种顺序连接表的信息。...explain 能做什么 分析出表的读取顺序; 数据读取操作的操作类型; 哪些索引可以使用; 哪些索引被实际使用; 表之间的引用; 每张表多少行被优化器查询。...语法如下: explain sql 语句 二、explain 结果解析 参数 描述 id 执行 sql 语句操作表的顺序 select_type 查询的类型,如 SIMPLE、PRIMARY、SUBQUERY...possible_keys 可能使用的索引 key 实际使用的索引 key_len 查询中使用的索引长度 ref 列与索引的比较 rows 扫描行数 filtered 悬泉的行数占扫描的行数的百分比,理想结果时

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

    MySQL 多表联合查询何讲究?

    查询的时候也是先查询里边的子查询(即先查询 department 表),然后再执行外表的查询,我们可以看下它的执行计划: 可以看到,首先查询部门表,索引就用索引,没有索引就全表扫描,然后查询员工表,...所以在子查询中的可以不用 SELECT *,可以将之改为 SELECT 1 或者其他,MySQL 官方的说法是在实际执行时会忽略SELECT 清单,因此写啥区别不大。...为什么要小表驱动大表 在 MySQL 中,这种多表联合查询的原理是:以驱动表的数据为基础,通过类似于我们 Java 代码中写的嵌套循环 的方式去跟被驱动表记录进行匹配。...但是,既然把数据都读入到内存中,内存中能放下?内存中放不下咋办?...我们看上面的查询计划,对 E 表的查询中,Extra 中还出现了 Using join buffer (Block Nested Loop),Block 不就有分块的意思

    2.1K20

    MySQL数据查询太多会OOM

    逻辑备份时,可不就是做整库扫描?若这样就会把内存吃光,逻辑备份不是早就挂了? 所以大表全表扫描,看起来应该没问题。这是为啥呢?...因此,对于正常的线上业务来说,若一个查询的返回结果不多,推荐使用mysql_store_result接口,直接把查询结果保存到本地内存。 当然前提是查询返回结果不多。...如果太多,因为执行了一个大查询导致客户端占用内存近20G,这种情况下就需要改用mysql_use_result接口。...小结 MySQL采用的是边算边发的逻辑,因此对于数据量很大的查询结果来说,不会在server端保存完整的结果集。所以,如果客户端读结果不及时,会堵住MySQL查询过程,但是不会把内存打爆。...而对于InnoDB引擎内部,由于淘汰策略,大查询也不会导致内存暴涨。并且,由于InnoDB对LRU算法做了改进,冷数据的全表扫描,对Buffer Pool的影响也能做到可控。

    96420

    mysql查询,你操作的对

    01 — 概念方面 MySQL查询,全称 慢查询日志 ,它是 MySQL 提供的一种日志记录,用了记录在 MySQL 中响应时间超过阈值的语句。...默认情况下,MySQL 是不会自动启动慢查询日志的,需要我们手动来设置这个参数。 那么当然,如果我们不是用来将项目进行调优的话,一般不建议启动该参数,因为开启后,对于慢查询日志的性能多少会带来影响。...log-slow-queries | slow-query-log-file:5.6以下 和 5.6以上版本版本 MySQL 数据库慢查询日志存储路径。...log_slow_admin_statements | OFF | +---------------------------+-------+ 1 row in set (0.00 sec) 第七小节:Slow_queries 如果你想查询多少条慢查询记录...)得到按照时间排序的前10条里面含有左连接的查询语句 mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log 另外建议在使用这些命令时结合

    68540

    MySQL数据查询太多会OOM

    逻辑备份时,可不就是做整库扫描?若这样就会把内存吃光,逻辑备份不是早就挂了? 所以大表全表扫描,看起来应该没问题。这是为啥呢?...因此,对于正常的线上业务来说,若一个查询的返回结果不多,推荐使用mysql_store_result接口,直接把查询结果保存到本地内存。 当然前提是查询返回结果不多。...如果太多,因为执行了一个大查询导致客户端占用内存近20G,这种情况下就需要改用mysql_use_result接口。...小结 MySQL采用的是边算边发的逻辑,因此对于数据量很大的查询结果来说,不会在server端保存完整的结果集。所以,如果客户端读结果不及时,会堵住MySQL查询过程,但是不会把内存打爆。...而对于InnoDB引擎内部,由于淘汰策略,大查询也不会导致内存暴涨。并且,由于InnoDB对LRU算法做了改进,冷数据的全表扫描,对Buffer Pool的影响也能做到可控。

    94620

    mysql的limit查询竟然坑?

    背景 最近项目联调的时候发现了分页查询的一个bug,分页查询总有数据查不出来或者重复查出。 数据库一共14条记录。 如果按照一页10条。那么第一页和第二页的查询SQL和和结果如下。...,查询结果显然不是按照某一列排序的(很乱)。...分析问题 为什么limit查询不加order by就会出现 分页查询总有数据查不出来或者重复查出? 是不是隐含的order排序? 此时explain登场(不了解的百度)。...索引的作用两个:检索、排序 因为两个SQL使用了不同的索引(排序规则),索引limit出来就会出现上面的问题,问题解开了。...总结 一说MySQL优化大家都知道explian,但是真正有价值的是场景,是让你的知识落地的场景。实践出真知。

    17410

    MySQL中的分析器(Analyzer)

    MySQL中的分析器(Analyzer) MySQL分析器查询执行过程中的一个关键组件,它的主要职责是解析和处理SQL语句,确保它们的语法正确,并将其转换为数据库能够理解和执行的格式。...核心功能 分析器的核心功能包括: 语法检查:确保SQL语句遵循MySQL的语法规则。 解析查询:将SQL语句分解成可理解的部分,如关键字、表达式、函数等。...工作流程 当一个SQL语句被提交到MySQL服务器时,分析器的工作流程通常如下: 词法分析:将输入的SQL字符串分解成一系列的词法单元(tokens),例如关键字、标识符、运算符等。...性能优化:通过分析器的处理,可以对SQL语句进行优化,提高查询的执行效率。 安全性:它还有助于防止SQL注入等安全问题,因为所有的输入都会经过严格的语法和语义检查。...结论 总的来说,MySQL中的分析器是确保数据库能够正确、高效、安全地执行SQL查询的关键环节。开发者在编写SQL语句时,了解分析器的工作原理可以帮助他们写出更优质的代码,并避免常见的错误。

    63010

    关于MySQL多表联合查询,你真的会用

    上节课给大家介绍了MySQL查询的基本内容,具体可回顾MySQL查询的基本使用方法(四),本节课我们准备给大家介绍MySQL的多表联合查询。...大家都知道,MySQL多表联合查询包括内连接、外连接、笛卡尔积连接查询三种。今天我们先重点介绍常用的外连接与内连接查询,即left join /right join/inner join的基本用法。...可以使用以下左连接查询实现。...三表及以上联合查询用法与两表联合查询用法基本一致,但通常建议一次性连接多表查询的数量不超过4个,表数量越多,可能影响最终的查询效率。 注意MySQL执行顺序。...04 总结 以上就是本节课要介绍的全部内容,下节课我们将继续介绍多表联合查询的其他内容以及多表联合查询与子查询的联系与区别,敬请关注!

    9.1K22

    【说站】mysql分析器如何理解

    mysql分析器如何理解 说明 1、根据mysql语法写出sql后交给服务层,分析器对sql语句进行词法分析和语法分析。 2、mysql分析器使用mysql语法规则进行验证和分析查询。...Mysql通过识别字符串中的列名、表名、where、select/update/insert等mysql关键词,根据语法规则判断sql是否符合语法要求,最终形成抽象的语法树(AST)。...如果关键词有误会提示You have an error in your SQL syntax的信息,具体错误需要关注use near后的内容。...mysql> elect * from iam_user where id = 0; ERROR 1064 (42000): You have an error in your SQL syntax; ... * from iam_user where id = 0' at line 1 以上就是mysql分析器的理解,希望对大家有所帮助。

    48630

    mysql 联合查询_MySQL联合查询

    MySQL联合查询 联合查询:union,将多次查询(多条select语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接。...基本语法:select 语句1 + union + [union选项] + select 语句2 + …; union 选项:与select选项一样两种 all:无论重复与否,保留所有记录; distinct...特别地,联合查询只要求字段数相同,而跟类型无关。...意义 联合查询的意义两种,分别为: 查询同一张表,按时需要不同,例如查询学生信息,要求男生按年龄升序排序,女生按年龄降序排序; 多表查询,多张表的结构是完全一样的,保持的数据结构也是一样的。...根据我们刚刚学到的联合查询,貌似很容易啊!

    18.7K30

    为什么索引可以让查询变快,你思考过

    索引弊端? 肯定是有的,索引可以提高查询读取性能,而它将降低写入性能。...当索引时,如果更改一条记录,或者在数据库中插入一条新的记录,它将执行两个写入操作(一个操作是写入记录本身,另一个操作是将更新索引)。...常见的sql优化手段哪些 1.避免全表扫描 全表扫描往往发生在下面几种情况: SQL的on子句或者where子句涉及到的列上没有索引; 表数据量很小,走索引查询比全表扫描更麻烦;这对于少于10行且行长度较短的表来说很常见...这个是因为age中查询时范围查询了,pos列的索引就没有生效了 尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *。 对于MySQL而言 mysql在使用不等于(!...,mysql索引会失效会变成全表扫描的操作 我们还要避免排序,不能避免,尽量选择索引排序;避免查询不必要的字段;避免临时表的创建,删除。

    74210

    为什么索引可以让查询变快,你思考过

    索引弊端? 肯定是有的,索引可以提高查询读取性能,而它将降低写入性能。...当索引时,如果更改一条记录,或者在数据库中插入一条新的记录,它将执行两个写入操作(一个操作是写入记录本身,另一个操作是将更新索引)。...常见的sql优化手段哪些 1.避免全表扫描 全表扫描往往发生在下面几种情况: SQL的on子句或者where子句涉及到的列上没有索引; 表数据量很小,走索引查询比全表扫描更麻烦;这对于少于10行且行长度较短的表来说很常见...这个是因为age中查询时范围查询了,pos列的索引就没有生效了 尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *。 对于MySQL而言 mysql在使用不等于(!...,mysql索引会失效会变成全表扫描的操作 3.避免排序,不能避免,尽量选择索引排序 4.避免查询不必要的字段 5.避免临时表的创建,删除 (感谢阅读,希望对你所有帮助) 来源:blog.csdn.net

    1.6K30

    为什么索引可以让查询变快,你思考过

    索引弊端? 肯定是有的,索引可以提高查询读取性能,而它将降低写入性能。...当索引时,如果更改一条记录,或者在数据库中插入一条新的记录,它将执行两个写入操作(一个操作是写入记录本身,另一个操作是将更新索引)。...常见的sql优化手段哪些 1.避免全表扫描 全表扫描往往发生在下面几种情况: SQL的on子句或者where子句涉及到的列上没有索引; 表数据量很小,走索引查询比全表扫描更麻烦;这对于少于10行且行长度较短的表来说很常见...这个是因为age中查询时范围查询了,pos列的索引就没有生效了 尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *。 对于MySQL而言 mysql在使用不等于(!...,mysql索引会失效会变成全表扫描的操作 3.避免排序,不能避免,尽量选择索引排序 4.避免查询不必要的字段 5.避免临时表的创建,删除 - END -

    89940
    领券