MySQL性能优化(五)-- using filesort

栏目: 数据库 · 发布时间: 6年前

内容简介:(1)explain select id from course where category_id>1 order by category_id;根据最左前缀原则,order by后面的的category_id会用到组合索引(2)explain select id from course where category_id>1 order by category_id,buy_times;

1.首先建表和索引(以下使用的 sql 版本是5.5.54)

/*课程表*/
create table course(
	id int primary key auto_increment,/* 主键自增*/
	title varchar(50) not null,/* 标题*/
	category_id int not null,/* 属于哪个类目*/
	school_id int not null,/* 属于哪个学校*/
	buy_times int not null,/* 购买次数*/
	browse_times int not null/* 浏览次数*/
);
insert into course(title,category_id,school_id,buy_times,browse_times) values('java课程',1,1,800,8680);
insert into course(title,category_id,school_id,buy_times,browse_times) values('android课程',2,1,400,8030);
insert into course(title,category_id,school_id,buy_times,browse_times) values('mysql课程',3,2,200,2902);
insert into course(title,category_id,school_id,buy_times,browse_times) values('oracle课程',2,2,100,6710);
insert into course(title,category_id,school_id,buy_times,browse_times) values('C#课程',1,3,620,2890);
insert into course(title,category_id,school_id,buy_times,browse_times) values('PS课程',4,4,210,4300);
insert into course(title,category_id,school_id,buy_times,browse_times) values('CAD课程',5,1,403,6080);

/*在category_id和buy_times上建立组合索引*/
create index idx_cate_buy on course(category_id,buy_times);
复制代码

2.order by 和 group by 会产生 using filesort的有哪些?

(1)explain select id from course where category_id>1 order by category_id;

根据最左前缀原则,order by后面的的category_id会用到组合索引

(2)explain select id from course where category_id>1 order by category_id,buy_times;

根据最左前缀原则,order by后面的的category_id buy_times会用到组合索引,因为索引就是这两个字段

(3)explain select id from course where category_id>1 order by buy_times;

根据最左前缀原则,order by后面的字段是缺少了最左边的category_id,所以会产生 using filesort

(4)explain select id from course where category_id>1 order by buy_times,category_id;

order by后面的字段顺序不符合组合索引中的顺序,所以order by后面的不会走索引,即会产生using filesort

(5)explain select id from course order by category_id;

根据最左前缀原则,order by后面存在索引中的最左列,所以会用到索引

(6)explain select id from course order by buy_times;

根据最左前缀原则,order by后面的字段 没有索引中的最左列的字段,所以不会走索引,会产生using filesort

(7)explain select id from course where buy_times > 1 order by buy_times;

根据最左前缀原则,order by后面的字段 没有索引中的最左列的字段,所以不会走索引,会产生using fillesort

(8)explain select id from course where buy_times > 1 order by category_id;

根据最左前缀原则,order by后面的字段存在于索引中最左列,所以会走索引

(9)explain select id from course order by buy_times desc,category_id asc;

根据最最左前缀原则,order by后面的字段顺序和索引中的不符合,则会产生using filesort

(10)explain select id from course order by category_id desc,buy_times asc;

这一条虽然order by后面的字段和索引中字段顺序相同,但是一个是降序,一个是升序,所以也会产生using filesort,同时升序和同时降序就不会产生using filesort了

总结:终上所述,(3)(4)(6)(7)(9)(10)都会产生using filesort.

欢迎关注我的公众号,第一时间接收最新文章~ 搜索公众号:码咖

或者 扫描下方二维码:

MySQL性能优化(五)-- using filesort

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Data Mining

Web Data Mining

Bing Liu / Springer / 2006-12-28 / USD 59.95

Web mining aims to discover useful information and knowledge from the Web hyperlink structure, page contents, and usage data. Although Web mining uses many conventional data mining techniques, it is n......一起来看看 《Web Data Mining》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具