打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[MySQL] mysql优化实例-为join表关联字段增加索引

在排查所有查询语句效率的过程中 , 发现了join关联表的时候 , 被驱动表没有走索引而是进行的全表扫描

实际的sql语句如下:

explain select a.* from audit_rules a left join audit_rules_detail b on a.id=b.rule_id where a.ent_id=23684

输出:

+----+-------------+-------+------+---------------+------------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key        | key_len | ref   | rows | Extra |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------+
|  1 | SIMPLE      | a     | ref  | idx_ent_id    | idx_ent_id | 4       | const |   12 |       |
|  1 | SIMPLE      | b     | ALL  | NULL          | NULL       | NULL    | NULL  |   35 |       |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------+

看到表b是全表扫描 , 这是因为b的字段rule_id没有索引

增加上索引以后

+----+-------------+-------+------+---------------+-------------+---------+--------------+------+-------------+
| id | select_type | table | type | possible_keys | key         | key_len | ref          | rows | Extra       |
+----+-------------+-------+------+---------------+-------------+---------+--------------+------+-------------+
|  1 | SIMPLE      | a     | ref  | idx_ent_id    | idx_ent_id  | 4       | const        |   12 |             |
|  1 | SIMPLE      | b     | ref  | idx_rule_id   | idx_rule_id | 4       | sinanet.a.id |    1 | Using index |

MySQL是只支持一种JOIN算法Nested-Loop Join(嵌套循环链接)
当关联字段有索引时,走的是Index Nested-Loop Join(索引嵌套链接)
没有索引时会走,Block Nested-Loop Join比Simple Nested-Loop Join多了一个中间join buffer缓冲处理的过程

没有索引时:

 

 

有索引时

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
MySQL这些底层执行原理,早已成必备了!
MySQL索引原理及慢查询优化(好文)
34.到底可不可以使用joinundefined
深入剖析SQL JOIN原理,助你掌握数据连接的奥秘!
MySQL连接查询中索引的重要性
MySql 你知道什么情况下适合使用Join 联表查询吗 ?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服