MySQL優化索引之雙表優化

2021-10-05 17:55:36 字數 3593 閱讀 4216

建表sql

create table if not exists `class`(

`id` int(10) unsigned not null primary key auto_increment,

`card` int (10) unsigned not null);

create table if not exists `book`(

`bookid` int(10) unsigned not null primary key auto_increment,

`card` int (10) unsigned not null);

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)));

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 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)));

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)));

需求1:兩張表左連線,即要左表的全部資料+左右共有部分不加索引的情況下左右表查詢都是all 

要想優化左連線,要在右表加索引

alter table `book` add index y ( `card` );
再次檢視執行計畫

需求2:兩張表右連線,即要右表的全部資料+左右共有部分要想優化右連線,要在左表加索引

先刪除上一步的右表索引

drop index y on book;
然後在左表上建立索引

alter table class add index y (card);
再次執行查詢計畫 

Mysql之索引優化案例 單錶優化 雙表優化

單錶優化 建表create table article id int unsigned notnull primary keyauto increment author id int unsigned notnull category id int unsigned notnull views in...

雙索引 mysql mysql 雙表索引優化

1.樣例資料 version mysql 8.0.19 create table if not exists class id int 10 unsigned not null auto increment,card int 10 unsigned not null,primary key id e...

雙索引 mysql (五)MySQL兩表索引優化

建表語句 create table if not exists class id int 10 unsigned not null auto increment,card int 10 unsigned not null,primary key id create table if not exis...