在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上。 我们知道MySQL的性能优化方法,一般有建立索引、规避复杂联合查询、设置冗余字段、建立中间表、查询缓存等,也知道用EXPLAIN来查看执行计划。 但对MySQL复杂查询语句执行过程和内部机制,MySQL Optimizer本身所做优化以及查询语句调整对性能所产生的影响及其原因知之甚少。 本文试图对其中的一些关键概念如执行过程、索引使用等做比较深入的探讨,知其然,知其所以然, 这样可以避免在原本通过MySQL简单优化就能获得很好效果的情况下,盲目跟风转向NoSQL存储或者投入资金升级基础设施。 工欲善其事,必先利其器,这里首先介绍MySQL查询语句性能分析工具。 MySQL的EXPLAIN命令是用来分析查询性能的工具,EXPLAIN的输出每一行对应于查询语句中的一张表的执行计划说明,其输出列含义如下表: 上表中type列是表关联类型,常见的有如下类型(按关联查询效率从高到低排列):
key列代表索引(index),rows表示估计会扫描多少行记录, Extra表示附加信息,常见的有如下几种(也按查询效率从高到低排列):
如果EXPLAIN出现后面两个信息(Using filesort,Using temporary),而rows又比较大,通常意味着你需要调整查询语句,或者需要添加索引,总之需要尽量消除这两个信息。 下面给出EXPLAIN结果实例(从用户档案表中找出昵称和性别,按用户表中的用户关注者数量排序): 上面的查询语句就是典型的问题案例,Using filesort和Using temporary的具体含义以及如何优化上述语句放在下一篇文章中结合查询过程和原理来专门讨论。 以上就是本篇文章的全部内容了,希望对各位有所帮助。如果大家还有其他方面的问题,可以留言交流,请持续关注极客世界! |
请发表评论