MySQL查询语句进程和EXPLAIN语句的基本概念及其优化
发布时间:2022-01-18 13:37:05 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要讲解了MySQL查询语句过程和EXPLAIN语句的基本概念及其优化,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习MySQL查询语句过程和EXPLAIN语句的基本概念及其优化吧! 网站或服务的性能关键点很大
这篇文章主要讲解了“MySQL查询语句过程和EXPLAIN语句的基本概念及其优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL查询语句过程和EXPLAIN语句的基本概念及其优化”吧! 网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上。 我们知道MySQL的性能优化方法,一般有建立索引、规避复杂联合查询、设置冗余字段、建立中间表、查询缓存等,也知道用EXPLAIN来查看执行计划。 ![]() 但对MySQL复杂查询语句执行过程和内部机制,MySQL Optimizer本身所做优化以及查询语句调整对性能所产生的影响及其原因知之甚少。 本文试图对其中的一些关键概念如执行过程、索引使用等做比较深入的探讨,知其然,知其所以然, 这样可以避免在原本通过MySQL简单优化就能获得很好效果的情况下,盲目跟风转向NoSQL存储或者投入资金升级基础设施。 工欲善其事,必先利其器,这里首先介绍MySQL查询语句性能分析工具。 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 > 10; 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又比较大,通常意味着你需要调整查询语句,或者需要添加索引,总之需要尽量消除这两个信息。 (编辑:温州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读