400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

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

如何解析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优化的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


本文名称:如何解析MySQL性能优化中的SQL优化
网站路径:http://www.bluegullmedia.com/article/giddhj.html

其他资讯

让你的专属顾问为你服务

0.0485s