温馨提示×

温馨提示×

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

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

mysql中SQL优化的示例分析

发布时间:2021-11-17 10:46:56 来源:亿速云 阅读:158 作者:小新 栏目:大数据

这篇文章主要为大家展示了“mysql中SQL优化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中SQL优化的示例分析”这篇文章吧。

背景:告警查询接口较慢,一般都在2.5秒左右,由于是UI查询,这个时间较长,对于用户有点不可接受

目的:控制查询接口的速度在1秒左右

优化收获:

1、order by

  • order by 后面的列也需要执行计划匹配上索引才会高效。

  • 不一定用了order by 就一定慢,有时候说不定会更快,更快的情况,一般是由于,order by 的列经过mysql分析后选择了一个适合order by以及where后条件的索引;而去掉order by后反而使用了一个差的索引,从而导致去掉order by后反而查询会变慢。案例如下:

  • mysql中SQL优化的示例分析

  • 没有order by 反而慢了

        看下执行计划,并没有使用INDEX_STATUS_LEVEL

mysql中SQL优化的示例分析

使用order by 试试:

mysql中SQL优化的示例分析

可见变快了,看下执行计划:

mysql中SQL优化的示例分析

2、mysql 的索引选择

mysql会根据自身的逻辑选择索引,但是实测下来不一定是最优的,经过多次测试发现,mysql将alertstatus和leveles两个字段的索引进行合并的时候,速度最快。最终通过加了status_level联合索引解决了。

第二点解决了项目sql优化的问题,其它点为优化过程中的收获。

3、find_in_set函数

这个函数性能较差,需要将数据转换为多行。

4、并不是所有索引对查询都有效(如第二点的感悟),SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。 

5、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。 

6、尽量避免大事务操作,提高系统并发能力

7、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。 

8、排查命令一:show global status;

可以列出MySQL服务器运行各种状态值

以上是“mysql中SQL优化的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

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

AI