文章目录
- 写在文章开头
- 详解MySQL left join
- 场景描述
- 讲讲join的原理
- 能不能说说这个LEFT JOIN如何加索引
- left join on 左右字段是否都需要加索引?为什么?
- 你觉得针对联表查询还有那些优化技巧
- 小结
- 参考
写在文章开头
连接查询算是日常比较常用的数据库关联关键字涉及左外连接、右外连接、内连接三种连接方式,本文将从MySQL 8.0的角度针对连接查询和优化进行深入解析,希望对你有帮助。
Hi,我是 sharkChili ,是个不断在硬核技术上作死的技术人,是 CSDN的博客专家 ,也是开源项目 Java Guide 的维护者之一,熟悉 Java 也会一点 Go ,偶尔也会在 C源码 边缘徘徊。写过很多有意思的技术博客,也还在研究并输出技术的路上,希望我的文章对你有帮助,非常欢迎你关注我的公众号: 写代码的SharkChili 。
同时也非常欢迎你star我的开源项目mini-redis:https://github.com/shark-ctrl/mini-redis
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注 “加群” 即可和笔者和笔者的朋友们进行深入交流。
详解MySQL left join
场景描述
我们现在有一个驱动表customer
,它存储客户id、姓名以及出生日期,默认情况下id
是主键,没有任何索引,对此我们给出DDL语句:
CREATE TABLE `customer` (`id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(100) DEFAULT NULL,`birthday` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
customer
有一张关联表,c_id记录着与其关联数据的id,并用available_balance
记录客户余额,对应DDL
如下,可以看到此时我们没有添加任何索引:
CREATE TABLE `customer_balances` (`id` bigint NOT NULL AUTO_INCREMENT,`c_id` bigint NOT NULL,`available_balance