如何解析MySQL性能优化中的SQL优化

发布时间:2021-11-16 11:07:30 作者:柒染
来源:亿速云 阅读:175

如何解析MySQL性能优化中的SQL优化,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

注:以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础

作者:Sky.Jian | 可以任意转载, 但转载时务必以超链接形式标明文章原始出处 和 作者信息 及 版权声明 
链接:http://isky000.com/database/mysql-performance-tuning-sql


博主附:
第8点曾经在eygle的dba-notes中提到过。(在Oracle DB中仍然有效)

主要问题是通过连接访问新闻页面及其缓慢,通常需要数十秒才能返回。

查询v$session视图,获取进程信息:
SQL> select sid,serial#,username from v$session where username is not null;
如何解析MySQL性能优化中的SQL优化


对相应会话启用sql_trace跟踪:
SQL> exec dbms_system.set_sql_trace_in_session(7,284,true)
SQL> exec dbms_system.set_sql_trace_in_session(11,214,true)
SQL> exec dbms_system.set_sql_trace_in_session(16,1042,true)

执行一段时间后,关闭:
SQL> exec dbms_system.set_sql_trace_in_session(7,284,false)
SQL> exec dbms_system.set_sql_trace_in_session(11,214,false)
SQL> exec dbms_system.set_sql_trace_in_session(16,1042,false)

检查trace文件,可以找到跟踪过程中前台执行的sql调用,检查发现以下语句是可疑的性能瓶颈点:
select auditstatus,categoryid,auditlevel from
categoryarticleassign a,category b where b.id=a.categoryid
and articleId=20030700400141 and auditstatus>0

如何解析MySQL性能优化中的SQL优化

这里的查询是根据articleId进行新闻读取的,但是注意到逻辑读有3892,这是一个较高的数字,这个内容引起了我的注意。
接下来的类似查询跟踪得到的执行计划显示,全表访问被执行:

如何解析MySQL性能优化中的SQL优化

然后检查表结构,查看是否存在有效索引,以下输出的idx_articleid给予articleid创建,但在以下查询中都没有被用到 
SQL> select index_name,table_name,column_name from user_ind_columns
2 where table_name=upper('categoryarticleassign');
如何解析MySQL性能优化中的SQL优化

检查发现表结构如下:
如何解析MySQL性能优化中的SQL优化

此时发现articleid为varchar2类型,而查询中给出的articleid=20030700400141是一个number型,oracle发生了潜在的数据类型转换,从而导致了索引失效。

解决方法很简单,只要将articleid加上一个单引号即可。

看完上述内容,你们掌握如何解析MySQL性能优化中的SQL优化的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. mysql慢sql优化
  2. MySQL SQL优化之‘%’

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql sql

上一篇:jQuery如何改变input的属性

下一篇:jquery怎么增加一行tr

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》