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优化
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- NLJ 效果不错,BNL 大表 join 性能差,消耗 CPU 资源。都可继续优化 t1 1000 行, a=10...
- 1.A simple master-to-slave replication is currently being...