【云小课】【第30课】云数据库 GaussDB(for MySQL)如何查看和优化慢SQL

举报
数据库的小云妹 发表于 2021/10/14 09:52:15 2021/10/14
【摘要】 慢SQL产生的主要原因有SQL编写问题、锁等待、业务实例相互干扰对IO/CPU资源征用和服务器硬件等。在业务运行中,由于SQL编写导致的慢SQL的概率最大,故着重从SQL编写的优化入手,并结合具体案例进行说明。


云小课必用.png

慢SQL产生的主要原因有SQL编写问题、锁等待、业务实例相互干扰对IO/CPU资源征用和服务器硬件等。在业务运行中,由于SQL编写导致的慢SQL的概率最大,故着重从SQL编写的优化入手,并结合具体案例进行说明。

如何查看慢SQL

1.   登录管理控制台。

2.   单击管理控制台左上角的1.png,选择区域和项目。

3.   在页面左上角单击1.png,选择“数据库 > 云数据库 GaussDB”。进入云数据库GaussDB控制台,在左侧导航栏选择“GaussDB(for MySQL)”。

4.   在“实例管理”页面,选择目标实例,单击实例名称,进入“基本信息”页面。

5.   在左侧导航树,单击“日志管理”。

6.   选择“慢日志”页签,查看慢SQL语句的详细信息。慢日志功能支持查看指定执行语句类型或时间段的慢日志记录。

如何进行慢SQL优化

本部分从SQL编写角度介绍慢SQL可进行的优化。

1.   字段类型转换导致不用索引,如字符串类型的不用引号,数字类型的用引号等,这有可能会用不到索引导致全表被扫描。

2.   mysql不支持函数转换,所以字段前面不能加函数,否则将用不到索引。

3.   不要在字段前面加减运算。

4.   字符串比较长的SQL语句,可以考虑对一部分内容进行索引,从而减少索引文件大小,提高写入效率。

5.   like %在前面用不到索引。

6.   根据联合索引的第二个及以后的字段单独查询用不到索引。

7.   不要使用select *。

8.   排序请尽量使用升序。

9.   or的查询尽量用union代替(Innodb)。

10.   复合索引高选择性的字段排在前面。

11.   order by/group by字段应该包括在索引当中,减少排序操作开销,效率会更高。

慢SQL优化典型案例

本部分以“mysql不支持函数转换,所以字段前面不能加函数,否则将用不到索引优化点为例举例说明。

原SQL语句:

SELECT id,title,most_top,view_count,posttime 
FROM article where status=3 
AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17)  and 
DATEDIFF(NOW(),posttime)<=90 order by most_top desc,posttime desc limit 0,8 

1.png

原因分析通过explain可以看出来这个语句执行慢是因为ariticle表扫描了27298行,并进行了排序。

优化步骤:

1.   初步优化,对数据量进行限制。将原SQL语句修改为:

SELECT id,title,most_top,view_count,posttime 
FROM article where status=3 
AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17)  and 
DATEDIFF(NOW(),posttime)<=90 order by most_top desc,posttime desc limit 0,8

发现进行限制时间后并没有大幅度的提高。原因每次使用datediff运算导致不走索引即慢SQL优化点的第二条。

2.   继续修改,修改为:

SELECT id,title,most_top,view_count,posttime 
FROM article where status=3 
AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17)  and 
postime>='2017-09-05' order by most_top desc,posttime desc limit 0,8

重新执行SQL后,SQL执行速度大幅提升。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。