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

深入探索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。

20210

第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

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

    如何进行全方面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

    46810

    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的大查询中,如果各个小查询都依赖于外层查询的话

    55120

    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操作。

    2K40

    一条慢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:显示与查询相关的表名。

    35310

    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关联查询。

    80020

    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关联查询。

    85320

    MySQL底层概述—7.优化原则及慢查询

    title = 'test007'));(3)select_type和table字段说明select_type表示查询类型,主要用于区别普通查询还是子查询等,table表示被操作的表。...一.SIMPLE:简单的SELECT查询,查询中不包含子查询或者UNIONEXPLAIN SELECT * FROM L1 where id = 1;二.PRIMARY:在有子查询的情况下,最外层被标记为...id = (SELECT L3.id FROM L3 WHERE L3.title = 'test08'));四.UNION:UNION连接的两个SELECT查询在使用UNION时,左边的表的select_type...六.UNION RESULT:UNION的结果EXPLAIN SELECT * FROM (SELECT * FROM L3 UNION SELECT * FROM L4) a;(4)type字段说明type...九.尽可能避免复杂的join和子查询每条SQL的JOIN操作建议不要超过三张表。将复杂的SQL,拆分成多个小的SQL,单个表执行,然后对获取的结果在程序中进行封装。

    21510

    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的大查询中,如果各个小查询都依赖于外层查询的话

    46510

    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有去重的功能, 所以会使用到内存,如果只是拼接两个或者多个

    2.7K00

    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

    4.7K20

    总结一下 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.3K41

    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.3K10

    Hibernate HQL注入攻击入门

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

    4.3K80

    数据库调优笔记

    慢查询 处理步骤 判断慢查询产生(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(一个子查询的结果不能被缓存

    85721

    构建一个优秀的SQL及优化方案

    如果是查询Top N或者Bottom N,使用limit可减少排序计算和内存压力。尽量将排序的字段减少,它将能加快计算.正确的SQL:SELECT ......避免使用多LIKE语句---如果是使用的Presto的话,一定要使用regexp_like,这是因为Presto查询优化器没有对多个like语句进行优化,使用regexp_like对性能有较大提升正确的...所以即使右表也是大表,也会被拆分.缺点是会增加很多网络数据传输, 所以会比broadcast join的效率慢。...SELECT cte1.a1, cte1.a2, cte2.b1, cte2.b2FROM cte1 JOIN cte2 ON cte1.a3 = cte2.b3; 使用UNION...ALL代替UNION---和distinct的原因类似, UNION有去重的功能, 所以会引发内存使用的问题.如果你只是拼接两个或者多个SQL查询的结果, 尽量考虑用UNION ALL。

    82050
    领券