MySQL查询语句过程和EXPLAIN语句的基本概念及其优化

53次阅读
没有评论

共计 1491 个字符,预计需要花费 4 分钟才能阅读完成。

这篇文章主要讲解了“MySQL 查询语句过程和 EXPLAIN 语句的基本概念及其优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“MySQL 查询语句过程和 EXPLAIN 语句的基本概念及其优化”吧!

网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上。

我们知道 MySQL 的性能优化方法,一般有建立索引、规避复杂联合查询、设置冗余字段、建立中间表、查询缓存等,也知道用 EXPLAIN 来查看执行计划。

但对 MySQL 复杂查询语句执行过程和内部机制,MySQL Optimizer 本身所做优化以及查询语句调整对性能所产生的影响及其原因知之甚少。

本文试图对其中的一些关键概念如执行过程、索引使用等做比较深入的探讨,知其然,知其所以然,

这样可以避免在原本通过 MySQL 简单优化就能获得很好效果的情况下,盲目跟风转向 NoSQL 存储或者投入资金升级基础设施。

工欲善其事,必先利其器,这里首先介绍 MySQL 查询语句性能分析工具。

MySQL 的 EXPLAIN 命令是用来分析查询性能的工具,EXPLAIN 的输出每一行对应于查询语句中的一张表的执行计划说明,其输出列含义如下表:

上表中 type 列是表关联类型,常见的有如下类型(按关联查询效率从高到低排列):

const(常量连接),比如 SELECT * FROM user WHERE id=1;
eq_ref(等值引用),比如 SELECT * FROM user,card WHERE user.id=card.userid;
ref(引用),用于非唯一索引,比如 SELECT * FROM user,card WHERE user.last_name= test
range(范围),比如 SELECT * FROM tbl_name WHERE key_column
index(索引),根据索引来读取数据,如果索引已包含了查询数据,只需扫描索引树,否则执行全表扫描和 All 类似;
ALL(所有),全表扫描

key 列代表索引(index),rows 表示估计会扫描多少行记录,

Extra 表示附加信息,常见的有如下几种(也按查询效率从高到低排列):

Using index:表示使用索引,如果同时出现 Using where,代表使用索引来查找读取记录,如果没有 Using where,表示索引包含查询数据,无需额外的查找;
Using where:表示条件查询,如果 type 列是 ALL 或 index,而没有出现该信息,则你有可能在执行错误的查询:返回所有数据;
Using filesort:不是“使用文件索引”的含义!filesort 是 MySQL 所实现的一种排序策略,通常在使用到排序语句 ORDER BY 的时候,会出现该信息;
Using temporary:表示为了得到结果,使用了临时表,这通常是出现在多表联合查询,结果排序的场合;

如果 EXPLAIN 出现后面两个信息(Using filesort,Using temporary),而 rows 又比较大,通常意味着你需要调整查询语句,或者需要添加索引,总之需要尽量消除这两个信息。

下面给出 EXPLAIN 结果实例(从用户档案表中找出昵称和性别,按用户表中的用户关注者数量排序):

感谢各位的阅读,以上就是“MySQL 查询语句过程和 EXPLAIN 语句的基本概念及其优化”的内容了,经过本文的学习后,相信大家对 MySQL 查询语句过程和 EXPLAIN 语句的基本概念及其优化这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计1491字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)