内容简介:(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.
欢迎关注我的公众号,第一时间接收最新文章~ 搜索公众号:码咖或者 扫描下方二维码:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 性能优化第一课:性能指标
- 【前端性能优化】vue性能优化
- Golang 性能测试 (2) 性能分析
- 【前端性能优化】02--vue性能优化
- Java性能 -- 性能调优标准
- Java性能 -- 性能调优策略
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法设计与应用
迈克尔 T. 古德里奇(Michael T. Goodrich)、罗伯特·塔马契亚(Roberto Tamas / 乔海燕、李悫炜、王烁程 / 机械工业出版社 / 2017-11-20 / CNY 139.00
本书全面系统地介绍算法设计和算法应用的各个领域,内容涵盖经典数据结构、经典算法、算法分析方法、算法设计方法以及算法在各个领域的应用,还包含一些高级主题。本书采用应用驱动的方法引入各章内容,内容编排清晰合理,讲解由浅入深。此外,各章都附有巩固练习、创新练习和应用练习三种类型的题目,为读者理解和掌握算法设计和应用提供了很好的素材。 本书可作为高等院校计算机及相关专业“数据结构和算法”课程的本科生......一起来看看 《算法设计与应用》 这本书的介绍吧!