索引优化——多表优化

use runoob

DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT  ,
  `card` varchar(32) DEFAULT NULL  ,
  
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
  `bookid` bigint(20) NOT NULL AUTO_INCREMENT  ,
  `card` varchar(32) DEFAULT NULL  ,
  
  PRIMARY KEY (`bookid`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;

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

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


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

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

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

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


select * from  class;

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

select * from book;


select * from book inner join class on book.card=class.card;


 explain select * from class left join book on class.card=book.card;

alter table  book add index y(card);


 explain select * from class left join book on class.card=book.card;

drop index y on book;

/*左连接加上右表*/
alter table  class add index y(card);
explain select * from class left join book on class.card=book.card;
drop index y on class;

show index from class;
show index from book;
/*-------------------------------*/

explain select * from class right join book on class.card=book.card;
alter table  book add index y(card);
drop index y on book;

explain select * from class right join book on class.card=book.card;
alter table  class add index y(card);
drop index y on class


三表连接:使用了join bubuffer 。

use runoob

DROP TABLE IF EXISTS `phone`;
CREATE TABLE `phone` (
  `phoneid` bigint(20) NOT NULL AUTO_INCREMENT  ,
  `card` varchar(32) DEFAULT NULL  ,
  
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;


show index from class;
show index from book;


explain select * 
from class left join book
on class.card=book.card
left join phone 
on book.card=phone.card;


alter table  phone add index z(card);
alter table  book add index z(card);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

迅捷的软件产品制作专家

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值