首页
学习
活动
专区
圈层
工具
发布

深入探索SQL优化:利用慢查询日志和explain提升数据库效率

3.3、select_type主要用来分辨查询的类型,是普通查询还是联合查询还是子查询。...select_type valueMeaningSIMPLE简单查询-没有联合查询和子查询PRIMARY最外层selectUNION若第二个select出现在union之后,则被标记为unionDEPENDENT...UNIONunion或union all联合而成的结果会受外部表影响UNION RESULT从union表获取结果的selectSUBQUERYselect或者where列表中包含子查询DEPENDENT..., LIKE , or IN()index_subquery利用索引来关联子查询,不再扫描全表unique_subquery该连接类型类似与 index_subquery,使用的是唯一索引index_merge...为了简化此操作,您可以使用 mysqldumpslow 命令来处理慢查询日志文件并汇总其内容。4.1、慢查询日志参数long_query_time的最小值和默认值分别为 0 和 10。

81410

第09章_性能分析工具的使用

'Uptime'; 若查询 MySQL 服务器的慢查询次数,则可以执行如下语句: SHOW STATUS LIKE 'Slow_queries'; 慢查询次数参数可以结合慢查询日志找出慢查询语句,然后针对慢查询语句进行...SHOW VARIABLES LIKE '%slow%'; #以及 SHOW VARIABLES LIKE '%long_query_time%'; # 4.7 删除慢查询日志 使用 SHOW 语句显示慢查询日志信息...具体分析如下: SIMPLE 查询语句中不包含 UNION 或者子查询的查询都算作是 SIMPLE 类型,比方说下边这个单表查询 select_type 的值就是 SIMPLE : mysql...JOIN s2; PRIMARY 对于包含 UNION、UNION ALL 或者子查询的大查询来说,它是由几个小查询组成的,其中最左边的那个查询的 select_type 的值就是 PRIMARY...SUBQUERY 如果包含子查询的查询语句不能够转为对应的 semi-join 的形式,并且该子查询是不相关子查询,并且查询优化器决定采用将该子查询物化的方案来执行该子查询时,该子查询的第一个 SELECT

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

    如何进行全方面MySQL调优?

    + union(可去除重复数据)+ right join SELECT * FROM tbl_emp A LEFT JOIN tbl_dept B ON A.deptId = B.id UNION...越先执行 Ⅱ、select_type 查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询 ① simple 简单的 select 查询,查询中不包含子查询或者UNION...⑤ union 若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED ⑥ uoion result...查看慢查询日志是否开启 : SHOW VARIABLES LIKE '%slow_query_log%' ; 使用set global slow_query_log=1;开启了慢查询日志只对当前数据库生效...; 查看当前多少秒算慢 : SHOW VARIABLES LIKE 'long_query_time%' ; 查询当前系统中有多少条慢查询记录 : show global status like

    88410

    mysql优化概述

    like '%slow%'; # 如果没有开启,也可以在运行时动态开启这个参数 set global slow_query_log=ON; # 设置慢查询记录查询耗时多长的SQL,这里设置成100毫秒...UNION或者子查询 PRIMARY 对于包含UNION、UNION ALL或者子查询的大查询来说,它是由几个小查询组成的,其中最左边的那个查询的select_type值就是PRIMARY(顾名思义为主查询...) UNION 对于包含UNION或者UNION ALL的大查询来说,它是由几个小查询组成的,其中除了最左边的那个小查询以外,其余的小查询的select_type值就是UNION UNION RESULT...MySQL选择使用临时表来完成UNION查询的去重工作(UNION ALL),针对该临时表的查询的select_type就是UNION RESULT SUBQUERY 子查询的第一个SELECT(被物化...,只执行一次) DEPENDENT SUBQUERY 子查询的第一个SELECT(可能会被执行多次,取决外层的查询) DEPENDENT UNION 在包含UNION或者UNION ALL的大查询中,如果各个小查询都依赖于外层查询的话

    92920

    MySql性能测试

    select_type:查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询 ?...SIMPLE:简单的 select 查询,查询中不包含子查 PRIMARY:查询中若包含任何复杂的子部分,最外层查询则被标记为 SUBQUERY:在SELECT或WHERE列表中包含了子查询 DERIVED...:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询, 把结果放在临时表里 UNION:若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION...包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED UNION RESULT:从UNION表获取结果的SELECT table:显示这一行的数据是关于哪张表的 type:访问类型排列...t2】 第五行(执行顺序5):代表从union的临时表中读取行的阶段,table列的union1,4>表示用第一个和第四个select的结果进行union操作。

    2.7K40

    一条慢sql引发的思考

    你可能已经有了熟练的数据库管理员和开发团队,他们对 MySQL 的工作原理和最佳实践非常熟悉。 技术迁移成本低:转向 Elasticsearch 可能需要一定的学习和迁移成本。...SELECT * FROM table_name WHERE non_indexed_column = 'value'; LIKE 查询的模糊匹配:如果在 LIKE 查询中使用通配符在搜索模式的开头,...如果查询包含子查询,每个子查询都会有一个唯一的 ID。同一个查询的不同部分使用相同的 ID。...select_type:这表示查询的类型,包括以下几种可能的值: SIMPLE:简单查询,不包含子查询或 UNION。 PRIMARY:主查询(外层查询)。 SUBQUERY:子查询。...DERIVED:派生表,使用了子查询的结果。 UNION:UNION 中第二个 SELECT 开始的查询。 UNION RESULT:UNION 的结果。 table:显示与查询相关的表名。

    78610

    SQL优化指南

    一、慢查询日志 开启撒网模式 开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助。...SHOW VARIABLES LIKE 'slow%' 以我刚安装的mysql5.7为例 查询结果是这样子的: ?...primary 包含union或者子查询的主查询 即外层的查询 union UNION中的第二个或者后面的查询语句 subquery 一般子查询中的子查询被标记为subquery...tb_user WHERE id > 1000 LIMIT 10 七、优化子查询 子查询,也就是查询中有查询,常见的是where后面跟一个括号里面又是一条查询sql 尽可能的使用join关联查询来代替子查询...当然 这不是绝对的,比如某些非常简单的子查询就比关联查询效率高,事实效果如何还要看执行计划。 只能说大部分的子查询都可以优化成Join关联查询。

    1.2K20

    SQL优化指南

    慢查询日志 开启撒网模式     开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助。...计数器将增加 slow_query_log:是否开启慢查询日志 ON开启,OFF关闭 默认没有开启 slow_query_log_file:日志保存路径 SHOW VARIABLES LIKE '...包含union或者子查询的主查询 即外层的查询     union UNION中的第二个或者后面的查询语句     subquery 一般子查询中的子查询被标记为subquery,也就是位于select...tb_user WHERE id > 1000 LIMIT 10 优化子查询   子查询,也就是查询中有查询,常见的是where后面跟一个括号里面又是一条查询sql   尽可能的使用join关联查询来代替子查询...当然 这不是绝对的,比如某些非常简单的子查询就比关联查询效率高,事实效果如何还要看执行计划。   只能说大部分的子查询都可以优化成Join关联查询。

    1.2K20

    MySQL基础SQL编程学习1

    (3) NOT IN 该式根据使用的关键字是包含在列表内还是排除在列表外,指定表达式的搜索,搜索表达式可以是常量或列名,而列名可以是一组常量,但更多情况下是子查询 (4) NOT LIKE 匹配显示不满足条件的行...select avg(score) from studentscore就是子查询 -- 查询学生成绩表里分数低于平均成绩的学生姓名和成绩,并根据分数降序排列 select name,score form...注:insert into select 和select into from 的区别(MySQL 数据库不支持,Mssql支持),前则要求行表scorebak 必须存在,后者要求表scorebak...'^[a-zA-Z0-9]':表示查询以a-z或者A-Z以及0-9开头的内容; 基础示例: -- LIKE子句的模糊查询 SELECT host,user FROM user WHERE user LIKE...FROM Websites UNION SELECT country FROM apps ORDER BY country; -- 使用 UNION ALL 从 "Websites" 和 "apps

    6.2K20

    Presto介绍及常用查询优化方法总结

    ⑤ 用regexp_like代替多个like语句 Presto查询优化器没有对多个like语句进行优化,使用regexp_like对性能有较大提升 [GOOD] SELECT ......所以即使右表也是大表,也会被拆分,相比broadcast join,这种join方式的会增加很多网络数据传输,效率慢。 ③ 多个join的OR条件使用union代替 SELECT ......FROM t1 JOIN t2 ON t1.a1 = t2.a1 union SELECT ......FROM t1 JOIN t2 ON t1.a2 = t2.a2 ④ 使用WITH语句 使用Presto分析统计数据时,可考虑把多次查询合并为一次查询,用Presto提供的子查询完成。...FROM t1 JOIN tmp ON t1.a2 = tmp.a2; ⑤ 尽量用UNION ALL代替UNION 和distinct类似, UNION有去重的功能, 所以会使用到内存,如果只是拼接两个或者多个

    3.4K00

    mysql优化概述

    like '%slow%'; # 如果没有开启,也可以在运行时动态开启这个参数 set global slow_query_log=ON; # 设置慢查询记录查询耗时多长的SQL,这里设置成100毫秒...UNION或者子查询 PRIMARY 对于包含UNION、UNION ALL或者子查询的大查询来说,它是由几个小查询组成的,其中最左边的那个查询的select_type值就是PRIMARY(顾名思义为主查询...) UNION 对于包含UNION或者UNION ALL的大查询来说,它是由几个小查询组成的,其中除了最左边的那个小查询以外,其余的小查询的select_type值就是UNION UNION RESULT...MySQL选择使用临时表来完成UNION查询的去重工作(UNION ALL),针对该临时表的查询的select_type就是UNION RESULT SUBQUERY 子查询的第一个SELECT(被物化...,只执行一次) DEPENDENT SUBQUERY 子查询的第一个SELECT(可能会被执行多次,取决外层的查询) DEPENDENT UNION 在包含UNION或者UNION ALL的大查询中,如果各个小查询都依赖于外层查询的话

    80510

    有哪些方式优化慢 SQL?

    慢 SQL 的优化,主要从两个方面考虑,SQL 语句本身的优化,以及数据库设计的优化。避免不必要的列SQL 查询的时候,应该只查询需要的列,而不是包含额外的列,像select *这种写法应该尽量避免。...,是优化慢 SQL 的利器。...add index idx_a_b (a,b); 避免使用 or 查询 在 MySQL 5.0之前的版本要尽量避免使用 or 查询,可以使用 union 或者子查询来替代,因为早期的 MySQL 版本使用...JOIN 的优化 优化子查询 尽量使用 join 语句来替代子查询,因为子查询是嵌套查询,而嵌套查询会新建创建一张临时表,而临时表的创建与销毁会占用一定的系统资源以及花费一定的时间,同时对于返回结果集比较大的子查询...css 体验AI代码助手 代码解读复制代码-- 索引(a,b,c) select b,c from test where a like 'aa%' order by b,c; 只有当索引的列顺序和order

    65510

    Hibernate HQL注入攻击入门

    作者 Taskiller SQL注入是一种大家非常熟悉的攻击方式,目前网络上有大量存在注入漏洞的DBMS(如MySQL,Oracle,MSSQL等)。...但是,我在网络上找不到针对Hibernate查询语言的相关资源。因此本文总结了笔者在阅读文档和不断试验过程中的一些经验技巧。...HQL的一大挑战是注射模式非常有限,其没有联合,没有函数来创建简单延迟,没有系统函数,没有可用的元数据表等。Hibernate查询语言没有那些在后台数据库中可能存在的功能特性。...访问不同的表 如前所述,HQL支持UNION查询,可以与其它表join,但只有在模型明确定义了关系后才可使用。我发现访问其它表的唯一方法是使用子查询。...book0_.published=1 [22018-159] 技巧:调用后台函数 如前所述,Hibernate会在SELECT和WHERE语句中隐藏一些不可识别的列名,对函数也一样。

    5K80

    总结一下 MySQL 性能优化

    通用查询和慢查询日志也是要落盘的,可以根据实际情况开启,如果不需要使用的话就可以关掉。binlog 用于恢复和主从复制,这个可以开启。...查看相关参数的命令: # 慢查询日志 show variables like 'slow_query_log%' # 通用查询日志 show variables like '%general%'; #...union后续查询 SUBQUERY 子查询 type:查询数据时采用的方式 ALL 全表(性能最差) index 基于索引的全表 range 范围 ( in) ref 非唯一索引单值查询 const...区分 in 和 exists、not in 和 not exists 如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询。...某些情况下,可以使用连接代替子查询 因为使用 join,MySQL 不会在内存中创建临时表。

    1.8K41

    MySQL慢查询优化 EXPLAIN详解

    ,查看慢查询,show status like 'slow_queries'......,myisam存储引擎长时间启动需要进行碎片整理 查看慢查询 show status like 'slow_queries'; 查询慢查询时间...它可以是以下几种取值: SIMPLE:表示简单杳询,其中不包括连接查询和子查询; PRIMARY:表示主查询,或者最外层的查询语句; UNION:表示连接查询的第2个或后面的查询语句...; DEPENDENT UNION:连接查询中的第2个或后面的SELECT语句,取决于外面的查询; UNION RESULT:连接查询的结果; SUBQUERY:子查询中的第一个...not exists MySQL在查询时做一个LEFT JOIN优化时,当它在当前表中找到了和前一条记录符合LEFT JOIN条件后,就不再搜索更多的记录了。

    1.6K10

    数据库调优笔记

    慢查询 处理步骤 判断慢查询产生(CPU负载、IO读写、执行时间) 打开慢查询日志或使用分析工具(mysqldumpslow等) 选择调优方式 性能调优 应用程序优化 减少数据库连接次数,空间换时间 拆分复杂语句...> MOT IN NOT LIKE)和%开头的like(前导模糊查询)–会导致全表扫描 避免大表使用JOIN查询和子查询–会产生临时表,消耗较多CPU和内存,影响数据库性能 确定只有一条记录返回,可以加上...SIMPLE(简单SELECT,不使用UNION或子查询等) PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY) UNION(UNION中的第二个或后面的SELECT...语句) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询) UNION RESULT(UNION的结果) SUBQUERY(子查询中的第一个SELECT)...DEPENDENT SUBQUERY(子查询中的第一个SELECT,取决于外面的查询) DERIVED(派生表的SELECT, FROM子句的子查询) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存

    1.2K21

    SQL优化看这一篇就够了

    9.2.3 select_type 查询类型。用来区分普通查询,联合查询,子查询等的复杂查询 SIMPLE。简单的select查询,查询中不包括子查询或者union PRIMARY。...在From列表中包含的子查询被标记为derived(衍生表)。 MySQL会递归执行这些子查询,将结果放置于临时表中 UNION。...若第二个SELECT出现在union之后,则被标记为union 如果union包含在from子句的子查询中,外层的select被标记为derived union result。...Using temporary使用了临时表保存数据,常见于group By和order by。和上面的原因相同。非常影响性能。...默认为10,运行时间在10秒以上的SQL 12.2 使用慢查询日志 临时改变日志的方式,当MySQL服务重启以后该修改就失效了 默认慢查询日志是关闭的 #查看当前数据库的慢查询开启情况和日志存放位置 mysql

    1.2K30
    领券