美文网首页
极客时间第6天打卡-order by 是怎么工作的?

极客时间第6天打卡-order by 是怎么工作的?

作者: 随手点灯 | 来源:发表于2020-04-02 15:11 被阅读0次

以前基本上没这个概念,现在看了mysql45讲大概明白了.

当我们写一条语句的时候,比如:

select name,age,sex from student where age = 12 order by name desc limit 10

首先mysql就是有一个参数,sort_buffer_size,是排序的内存

如果mysql认为你要查询的字段总长度不会太长的话,就会采用全字段进行排序.

我们一般会在age上面加上索引,那么操作流程就是:

首先从age的索引树上找到符合age条件的student主键id,然后会表,去主键索引上找到对应的数据,然后将name,age,sex存入到sort buffer的内存当中,然后进行排序,如果读进来的字段值没有超过sort_buffer_size,在内存中排序,如果超过了,就写到磁盘上的多个文件上,然后采用归并排序的方式进行排序.

排序当然是根据排序字段进行排序的,最后取排序后的前面10条.

如果mysql认为一行的总数据长度过大的话,就会采用rowid进行排序.

也就是回表的过程中,只会把排序字段和主键id读取到sort_buffer当中,然后进行排序,返回前面10条再一次回表返回需要的字段.

也就是说rowid排序比全字段排序多了一个步骤,最后的回表.性能自然就差一点.

有没有办法不排序直接读呢?

有,我们都知道,索引是排好序的,所以改造的方法就是创建一个联合索引 Idx_age_name(age,order)

这样的话,读取到的数据就是已经排序好的,就不需要再次进行排序了.

同时只要查询三个字段的话,我么可以用覆盖索引的方式来提升效率.

相关文章

  • 极客时间第6天打卡-order by 是怎么工作的?

    以前基本上没这个概念,现在看了mysql45讲大概明白了. 当我们写一条语句的时候,比如: select name...

  • 极客时间第2天打卡

    打卡内容

  • 极客时间第3天打卡

    今天学习了争哥的行为型设计模式. 观察者设计模式:同步的,异步的,同一个进程的,不同进程之间都可以用到观察者模式....

  • 极客时间第5天打卡

    打卡 今天学习了争哥的数据算法之美,链表的相关知识. 过去我对算法几乎是不太懂的,,争哥的算法教程写的很好. 而且...

  • 极客时间第1天打卡

    修改前 今天主要学习的是郑晔老师的10x程序员工作法,里面关于结构化思维,顺便了解了李忠秋老师的结构化思维,其实这...

  • 极客时间第7天打卡

    打卡 今天学习了<>里面提到了gap锁,以前基本不懂什么是gap锁,现在明白一些些了. gap...

  • 极客时间第13天打卡

    JDK1.8新特性 不知道为啥我们公司出了个脑残的规定,不要在代码中使用Lambda表达式,后来参加一次阿里的代码...

  • 极客时间第8天打卡

    今天学习的是mysq45讲 主要是讲锁规则.主要有以下5条锁规则,两个原则,两个优化,一个bug 原则1: 如果是...

  • “order by”是怎么工作的?

    今天为大家转述一篇极客时间的MySQL实战45讲付费专栏的内容,由于本人之前对于这块内容理解的比较模糊,所以今天就...

  • “order by”是怎么工作的?

    在平常的开发过程中,一定遇到过根据某字段进行排序的需求。以市民表为例,假设你要查询城市是“杭州”的所有人名字,并且...

网友评论

      本文标题:极客时间第6天打卡-order by 是怎么工作的?

      本文链接:https://www.haomeiwen.com/subject/atuxphtx.html