mysql join优化

1: 小表作为驱动表
select * from t1 straight_join t2 on (t1.a=t2.a); -- 强制使用 t1为驱动表
2: 被驱动表加索引
3: 使用临时表,可以是存储为硬盘或者内存
create temporary table temp_t(id int primary key, a int, b int, index(b))engine=innodb; //engine=memory;
insert into temp_t select * from t2 where b>=1 and b<=2000;
select * from t1 join temp_t on (t1.b=temp_t.b);
drop table temp_t
临时表的特点:
建表语法是create temporary table …。
一个临时表只能被创建它的session访问,对其他线程不可见。所以,图中session A创建的临时表t,对于session B就是不可见的。
临时表可以与普通表同名。
session A内有同名的临时表和普通表的时候,show create语句,以及增删改查语句访问的是临时表。
show tables命令不显示临时表。
4: 业务端进行join

你可能感兴趣的:(mysql join优化)