首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

聊聊Order By

我们日常工作中写 SQL 语句,经常会使用 order by 对记录进行排序。如果 order by 能够使用索引中记录已经排好序的特性,就不需要再借助内存或磁盘空间进行排序,这无疑是效率最高的。...然而,还是有各种情况导致 order by 不能够使用索引,而是要进行额外的排序操作。MySQL 把需要借助内存或磁盘空间进行的排序操作统称为文件排序,而没有在概念上进一步分为文件排序和内存排序。...order by 子句中,可能会包含一个或多个排序字段,排序字段可以是 int、char、varchar、blob 等各种类型,假设有个字段是这么定义的:a varchar(21845),utf8 字符集下...两类排序 MySQL order by 的实现过程,可能会进行两类排序:内部排序、外部排序。...举例说明 select num from t order by num desc 以 排序模式为例,假设表中有 5 条记录,num 字段值分别为

70020

order by的工作原理

今天分享的内容关于order by的两种排序模式。全字段排序和rowid排序。...看下面这个SQL: mysql> explain select city,name,age from t where city='西安' order by name limit 1000 ; +---...01 全字段排序过程 SQL贴在这里: select city,name,age from t where city='西安' order by name limit 1000 ; 先来看全字段排序过程...其中name是我们order by的目标列,id是主键 2、根据city字段在二级索引上过滤出来记录的主键id值,然后回表聚集索引查询到对应的name和id值,并将name和id这2个字段放入sort_buffer...3、如果order by的字段上本身有索引,则数据记录本身有序,就不会使用sort buffer,之所以使用临时的磁盘文件来排序,是因为数据记录都是无序的。

68710
领券