随笔 - 171  文章 - 0  评论 - 0  阅读 - 62466

一般怎么分析一个sql

explain语句进行分析。还需要进一步分析的话可以进行optimizer_trace,一共prepare、optimizer、execute阶段,主要关注optimizer阶段。

type

详见索引的访问类型

key

实际使用的索引。

key_len

使用的索引的长度。可以分析联合索引用上了几个字段。如果命中的索引字段默认空值,会增加1字节

rows

MYSQL认为必须检查的用来返回请求数据的行数。

extra

using index 索引覆盖,减少回表。
using index condition:叫作 Index Condition Pushdown Optimization (索引下推优化)。
mysql5.6版本后推出 索引下推,server层过滤下推到存储引擎层,减少回表。
//t4表存在content1的普通索引
EXPLAIN SELECT * FROM t4 WHERE content1 > 'z' AND content1 LIKE '%a';
  • 如果没有索引下推(ICP),那么MySQL在存储引擎层找到满足content1 > 'z'条件的第一条二级索引记录。主键值进行回表,返回完整的记录给server层,server层再判断其他的搜索条件是否成立。如果成立则保留该记录,否则跳过该记录,然后向存储引擎层要下一条记录。
  • 如果使用了索引下推(ICP),那么MySQL在存储引擎层找到满足content1 > 'z'条件的第一条二级索引记录。不着急执行回表,而是在这条记录上先判断一下所有关于idx_content1索引中包含的条件是否成立,也就是content1 > 'z' AND content1 LIKE '%a'是否成立。如果这些条件不成立,则直接跳过该二级索引记录,去找下一条二级索引记录;如果这些条件成立,则执行回表操作,返回完整的记录给server层。

关闭索引下推
set optimizer_switch='index_condition_pushdown=off';
using filesort 需要关注,参考排序原理
Using join buffer (Block Nested Loop) 需要关注,需要进行嵌套循环计算,关联字段增加索引。

 

posted on   zhengbiyu  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示