[MySQL] mysql优化实例-为join表关联字段增加索引
2023-02-18 15:41:29 时间
在排查所有查询语句效率的过程中 , 发现了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缓冲处理的过程
没有索引时:
有索引时
相关文章
- 安卓项目五子棋代码详解(五)
- 安卓项目五子棋代码详解(四)
- 技术分享 | 缓存穿透 - Redis Module 之布隆过滤器
- Docker高级篇:Redis集群实战!从4主4从缩容到3主3从,该怎么处理?
- Redis 单线程模型 精讲
- Redis6.0使用了多线程还能保证线程安全么?-Redis6.0 多线程精讲
- Redis 搞懂缓存击穿、缓存穿透、缓存雪崩 产生原因及产线常用的解决方案
- 这样讲Redis哨兵机制Sentinel的工作原理,或许你真的能听懂~
- 这样讲Redis Cluster的工作原理,或许你真的能听懂~
- 实战:常见的延时队列解决方案及代码实现,真的很全:MQ、Redis、JDK队列、Netty时间轮~
- 这样讲Redis 主从复制的工作原理,或许你真的能听懂~
- 为什么有的人学完Netty 都还不知道BIO|NIO|AIO 的区别?
- 10分钟快速入门Netty 比写NIO爽百倍
- 熬夜手绘netty线程模型图 如果还不懂的话,那我...
- Netty 是如何解决拆包和 粘包问题 ?最后一种方案最香
- Netty 如何通过心跳检测机制实现空闲自动断开
- .NET Core如何通过认证机制访问Kafka?
- .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
- 一次 Redis 事务使用不当引发的生产事故
- 安卓项目五子棋代码详解(三)