2016 - 2024

感恩一路有你

如何选择数据库 MySQL中一条排序语句order by是如何工作的?

浏览量:2646 时间:2021-03-15 05:13:04 作者:admin

MySQL中一条排序语句order by是如何工作的?

MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉。

比如对于以下的查询,无法发挥索引的最佳性能。

  • 查询一:


  1. select * from tb1 where f1 = ... order by id desc
  • 查询二:

2. select * from tb1 where f1 = ... order by f1 asc , f2 desc



那对于上面的查询,尤其是数据量和并发到一定峰值的时候,则对OS的资源消耗非常大。一般这样的SQL在查询计划里面会出现using filesort等状态。



比如针对下面的表t1,针对字段rank1有两个索引,一个是正序的,一个是反序的。不过在MySQL 8.0 之前的版本都是按照正序来存储。



按照rank1 正向排序的执行计划,



按照rank1 反向排序的执行计划,



从执行计划来看,反向比正向除了extra里多了Using temporary Using filesort这两个,其他的一模一样。这两个就代表中间用到了临时表和排序,一般来说,凡是执行计划里用到了这两个的,性能几乎都不咋地。除非我这个临时表不太大,而用于排序的buffer也足够大,那性能也不至于太差。那这两个选项到底对性能有多大影响呢?

如何从mysql数据库中查出以日期排序出来的记录?

Mysql语句是:select * from Product as p order by p.addtime desc limit 6 Hibernate的DAO类中的语句是:from Product as p order by p.addtime desc limit 6

求mysql语句取前100条数据做排序在取其中的前5条?

测试:表名test,字段,id,name select*from(select*fromtestorderbyiddesclimit100)astmplimit5

如何选择数据库 mysql查询升序排列 mysql是干嘛的

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。