昨天我们聊到了索引失效的常见场景,今天我们接着深入探讨如何优化SQL中的关联查询,特别是左外连接、内连接以及JOIN语句的优化技巧。
我们会结合实际代码,带你更直观地理解JOIN的原理,并介绍几种不同的连接方式,比如简单嵌套循环连接、索引嵌套循环连接和块嵌套循环连接。掌握这些技巧后,你会发现优化多表查询的性能变得更加得心应手。
除此之外,我们还会讨论哈希连接和子查询优化,帮助你全面提升SQL查询的效率,让你对SQL优化有更清晰的认识。
1. 关联查询优化
1.1 数据准备
# 学生表
CREATE TABLE IF NOT EXISTS `student` (`student_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, -- 学生ID`class_num` INT(10) UNSIGNED NOT NULL, -- -- 班级号码PRIMARY KEY (`student_id`)
);
# 班级表
CREATE TABLE IF NOT EXISTS `class` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, -- 班级ID 主键`class_num` INT(10) UNSIGNED NOT NULL, -- 班级号码PRIMARY KEY (`id`)
);
留意一下这里没有使用主键进行关联。因为会走索引,下面会解释。
使用储存过程向向这两张表中插入50条数据
#向分类表中添加20条记录
INSERT INTO student (class_num) VALUES (FLOOR(1 +(RAND() * 20)));
#向图书表中添加20条记录
INSERT INTO class(class_num) VALUES (FLOOR(1 +(RAND() * 20)) );