目录标题
- MySQL Join 查询的底层原理及性能优化
- Join 的底层实现算法
- Index Nested-Loop Join (INLJ)
- Simple Nested-Loop Join (SNLJ)
- Block Nested-Loop Join (BNLJ)
- 为什么大厂/DBA 不建议使用过多的 Join?
- 优化建议
MySQL Join 查询的底层原理及性能优化
在使用数据库时,经常需要通过多个表的连接(join)来获取所需的数据。然而,当数据量达到一定规模后,DBA通常会建议不要使用过多的 join 操作,特别是超过三个表的 join。本文将探讨为什么会有这样的建议,并介绍 join 的底层实现算法。
Join 的底层实现算法
MySQL 实现 join 有三种主要的算法:
- Index Nested-Loop Join (INLJ)
- Simple Nested-Loop Join (SNLJ)
- Block Nested-Loop Join (BNLJ)
为了方便测试,我创建如下数据表:
-- 创建数据表
CREATE TABLE test_joinv1(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,m INT(11) NOT NULL,n INT(11) NOT NULL,KEY `index_1` (`m`)
)ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8;
-- 复制test_joinv2数据表
CREATE TABLE test_joinv2 LIKE test_joinv1;
-- 通过存储过程造部分数据给 test_joinv2
drop procedure create_data;
delimiter ;;
create procedure create_data(