索引3三表优化

背景:

索引2双表优化_zew1040994588的博客-优快云博客

过程:

CREATE TABLE IF NOT EXISTS `phone`(
`phoneid` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
`card` INT (10) UNSIGNED NOT NULL
)ENGINE = INNODB;

insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));
insert into phone(card) values(floor(1+(rand()*20)));

select * from phone;
show index from class;
alter table class drop index y; 
-- 这个会出现using buffer[mysql用了连接缓存]
explain select * from class inner join book on class.card=book.card
inner join phone on book.card = phone.card;
-- 工作中left join和 right join居多--我们以此来建立索引[测试用left join]
explain select * from class left join book on class.card=book.card
left join phone on book.card = phone.card;
alter table book add index z(card);
alter table phone add index y(card);

三表优化其实本质上是两表优化

join语句的优化
尽可能减少join语句中的NestedLoop的循环总次数:"永远用小结果集驱动大的结果集"
1-永远记得小表驱动大表!
比如存放书籍类的表来驱动存放书籍的表
2-优先NestedLoop[嵌套]的内层循环
先保证内层能够快速执行
3-保证join语句中被驱动表上Join条件字段已经被索引
4-当无法保证被驱动表的join条件字段被索引且
内存资源充足的前提下,不要太吝惜JoinBuffer的设置!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员象漂亮

竭诚为您服务!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值