这篇文章主要为大家展示了“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后反而查询会变慢。案例如下:
没有order by 反而慢了
看下执行计划,并没有使用INDEX_STATUS_LEVEL
使用order by 试试:
可见变快了,看下执行计划:
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优化的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。