CREATE TABLE `t` (`id` int(11) NOT NULL,`city` int(11) NOT NULL,`name` varchar(16) NOT NULL,`age` int(11) NOT NULL,`addr` varchar(128) DEFAULT NULL,PRIMARY KEY (`id`),KEY `city` (`city`)
) ENGINE=InnoDB;select city,name,age from t where city='杭州' order by name limit 1000 ;

全字段排序

rowid排序

rowid 排序相对于全字段排序,不会把所有字段都放入sort_buffer。所以在sort buffer中进行排序之后还得回表查询。

如果 MySQL 实在是担心排序内存太小,会影响排序效率,才会采用 rowid 排序算法,这样排序过程中一次可以排序更多行,但是需要再回到原表去取数据。

如果 MySQL 认为内存足够大,会优先选择全字段排序,把需要的字段都放到 sort_buffer中, 这样排序后就会直接从内存里面返回查询结果了,不用再回到原表去取数据。

这也就体现了 MySQL 的一个设计思想:如果内存够,就要多利用内存,尽量减少磁盘访问。 对于 InnoDB 表来说,rowid 排序会要求回表多造成磁盘读,因此不会被优先选择。

优化

现在我们加一个索引。

alter table t add index city_user(city, name);

那么上面的查询语句会大大优化。

因为查出city=杭州的name的属性已经是排好序的,无需在排序。

再优化

来,我们再加上这样的一个索引。

alter table t add index city_user_age(city, name, age);

你明白了怎么回事了么???  覆盖索引知道吗? 对的,如果在索引树上查到了自己所需的所有信息就不需要回主键的索引树(回表)再查询一边。这样的话,上面的查询讲大大省事。

当然,我们为个查询都能用上覆盖索引也不是百利而无一害,维护索引也是有一定的代价的。

全字段排序 VS rowid 排序相关推荐

  1. MySql 你知道 order by 是怎么回事吗? MySql全字段排序与 rowid 排序

    志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的 ...

  2. 《MySQL——order by逻辑(全字段排序与rowid排序)》

    创建一个表,然后使用查询语句: 查询城市是"杭州"的所有人名字,并且按照姓名排序返回前 1000 个人的姓名.年龄 create table 't' ('id' int(11) n ...

  3. mysql 排序字段索引吗_Mysql 排序优化与索引使用(转)

    为了优化SQL语句的排序性能,最好的情况是避免排序,合理利用索引是一个不错的方法.因为索引本身也是有序的,如果在需要排序的字段上面建立了合适的索引,那么就可以跳过排序的过程,提高SQL的查询速度.下面 ...

  4. Hadoop实例学习(八)全排序和区排序

    目录 排序 排序的分类 自定义排序 数据预处理 全排序与区排序 全排序 重写Bean类 编写Mapper类 编写Reduce类 编写Driver类 结果 区排序 重写Partition 编写Drive ...

  5. db2 某个字段排序_MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序...

    MySQL常规排序.自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序. 下面给出3中比较常用的排序方式,mark一下 1.常规排序ASC DESC ASC 正序 ...

  6. 动态列排序_Excel表格利用函数制作排序器(可依据不同字段、升降序排序)

    Excel表格中的排序功能是我们经常使用的一个功能,排序的方式主要有升序排序.降序排序和自定义排序.前两种排序方式默认的排序依据都是所选排序区域的第一列数据,自定义排序用户可以自定排序的主要依据和次要 ...

  7. java8怎么按照两个字段的乘积排序_django-orm F对象的使用 按照两个字段的和,乘积排序实例...

    class F F()是代表模型字段的值,也就是说对于一些特殊的字段的操作,我们不需要数据先取到内存中,然后操作,在存储到db中了. 以下为几个使用的经典场景: 1. 统计点击量,点赞(每次加1) f ...

  8. sql多字段求和降序排序_快速入门:Excel中如何按照多个字段排序

    Excel排序怎么排?我们经常使用表格来搜集记录信息.如果我们表格中的数据过多,而且没有进行数据的归纳总结.那应该是件让人头大的事儿,为了获得更加准确的数据,我们需要对Excel中的内容进行排序.排序 ...

  9. JDK8 按List中元素对象的多字段对List进行排序

    利用Java8按照元素对象的多字段对List进行排序 实例对象 public class WarningRule implements Serializable {private String hou ...

最新文章

  1. 全家竟然都迷陕西卫视的《关东男人》
  2. android自定义下载框架,Android_DownloadUtil
  3. 九九乘法表c语言编程伪代码,py_11分支和循环
  4. 小组是什么意思_生猪期货什么时候上市?相关企业如何参与生猪期货
  5. 高并发之 API 接口,分布式,防刷限流,如何做?
  6. 高级程序员的自我修养:如何才能成长为牛逼的高级程序员?
  7. C语言打印心形,爱心打印
  8. 下载Windows ISO镜像的方法 (超详细 适合新手入门)
  9. 5-27 冒泡法排序 (20分)
  10. 【转载】如何学习STM32?STM32入门学习经验总结
  11. python单词翻译-python 中英文翻译
  12. Linux下安装tuned以使用tuned-adm命令优化Linux系统性能
  13. 使用Freemarker的宏和模板生成html打印
  14. NumberUtils简单介绍和具体实例
  15. linux普通用户时间乱码,Linux root用户与普通用户时间不一致
  16. WIFI基础入门--802.11--跳频物理层(FH/FHSS)--11
  17. 【文献学习】薄膜的脱湿失效
  18. 使用OpenCV进行图片转码
  19. PDF转PPT软件哪个好?这几款软件亲测实用
  20. vis---network网状拓扑图展示

热门文章

  1. 如何把一个运行完好的Kafka搞崩溃
  2. fasthttp 快在哪里
  3. 高效终端设备视觉系统开发与优化
  4. ElasticSearch聚合语法学习(bucket,metric,hitogram,date hitogram)
  5. 挑战AI种番茄,第二届国际智慧温室种植挑战赛启动!
  6. 腾讯专有云研发过程首次披露
  7. FFmpeg源代码:avcodec_send_packet
  8. python 类的特殊成员(属性和方法)
  9. ffmpeg-简单AES加解密记录
  10. 目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN