mysql查询的时候没有加order by时的默认排序问题

有时候我们执行MySQL查询的时候,查询语句没有加order by,但是发现结果总是已经按照id排序好了的,难道MySQL就是为了好看给我们排序

mysql查询的时候没有加order by时的默认排序问题

如上图数据,是我查询了语句

SELECT * from employees WHERE first_name like “be%”;

看结果是按照emp_no排序,其中first_name上是有索引的。

首先我们需要搞清楚MySQL回表,回表是指在我们利用的索引树(比如上述语句用到的first_name字段索引)的数据不能满足我们select中选中的数据,因为first_name是二级索引(也可以说是非聚簇索引),该索引只能拿到emp_no,first_name字段值,索引select *查询的话就只能到主键索引所在的索引树上获取相应数据。

按照上述查询去first_name索引上匹配的话,我们匹配到的数据肯定是没法保证按照emp_no排序了,但是为啥最终我们看到的数据是按照emp_no排序了呢?其实这是mysql的mrr机制。

mrr想要达到的目的就是从磁盘的随机读变成顺序读,因为如果我们直接拿emp_no乱序的数据回表查询,那么就是一个随机读,这个性能是很差的,所以MySQL会在回表之前提前将emp_no数据排序好,这样回表就变成了顺序读,极大提高性能。

当我们将mrr关掉

set optimizer_switch=’mrr=off’;

再次执行

可以看到emp_no已经是乱序了

开启mrr后,我们来explain该查询语句,发现extra里显示了Using MRR

mysql查询的时候没有加order by时的默认排序问题

所以当我们期望查询的结果有序的时候,一定要在查询的语句中加上自己的order by,而不能因为默认排序了,就不加order by,因为MySQL的机制他是不定的。

Original: https://www.cnblogs.com/minjay/p/15598848.html
Author: minjay26
Title: mysql查询的时候没有加order by时的默认排序问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/579838/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java学习之反射机制

    0x00前言和思维导图 1.反射机制定义:java反射机制是指在java代码执行过程中,对于任意一个类,可以获取这个类的属性与方法;对于任意一个对象,可以获取、修改这个对象的属性值…

    Java 2023年6月13日
    066
  • springmvc学习笔记2

    一、Controller和RestFul 第一步:配置web.xml 第二步:spring_mvc_servlet.xml 参考文档:https://blog.csdn.net/E…

    Java 2023年6月7日
    054
  • JavaSE学习

    idea快捷键 alt+enter:自动补全 ctrl+d:复制当前内容到下一行 ctrl+f5:程序再运行一次 100.for:自动生成循环一百次的for循环语句 数组名.for…

    Java 2023年6月6日
    090
  • Exception in thread “main” java.lang.StackOverflowError at java.util.ArrayList$SubList.rangeCheckForAdd(Unknown Source)

    Exception in thread “main” java.lang.StackOverflowError at java.util.ArrayList…

    Java 2023年5月29日
    068
  • 检查点

    检查点 Checkpoint 概念: 背&amp…

    Java 2023年6月9日
    0108
  • Java面试题(十)–Spring Cloud

    1 基础知识篇 1、什么是微服务架构? 微服务架构是一种架构模式或者说是架构风格,它提倡将单一应用程序划分成一组小的服务。每个服务运行在其独立的自己的进程中服务之间相互配合、相互协…

    Java 2023年6月9日
    086
  • TCP 和 UDP 协议简介

    一、TCP TCP(Transmission Control Protocol),传输控制协议,对”传输、发送、通信”进行”控制”的…

    Java 2023年6月7日
    068
  • mysql基础以及innodb引擎

    mysql架构以及innodb架构 Mysql架构分为Server层和引擎层 Server层 包括 连接器 查询缓存 分析器 优化器 执行器 以及一个binlog日志模块(用于主从…

    Java 2023年6月7日
    091
  • Fatal error: Call to undefined function session_start()

    在FreeBSD主机上执行PHP页面报以下错误,Fatal error: Call to undefined function session_start() ,应该是在没有安装扩…

    Java 2023年5月30日
    071
  • JVM学习 运行时数据区 PC寄存器、本地方法栈、虚拟机栈

    2、运行时数据区 哔哩哔哩 尚硅谷视频 宋红康老师 2.1、程序计数器(PC寄存器) 作用 PC寄存器用来存储指向下一条指令的地址,也就是即将要执行指令的代码。由执行引擎读取下一条…

    Java 2023年6月16日
    082
  • Switch分支结构

    多重选择:switch语句 在处理多个选项时,使用多个 else/if 语句会使结构显得很臃肿。Java有一个和C/C++完全相同的switch语句。 例如,如果建立一个如下图所示…

    Java 2023年6月5日
    072
  • 从服务间的一次调用分析整个springcloud的调用过程(三)

    在 从服务间的一次调用分析整个springcloud的调用过程(二) 中我们会发现从头到尾都没说到负载均衡的逻辑,springcloud是如何在多个节点中选择哪个节点去执行请求的。…

    Java 2023年6月7日
    097
  • nginx防止浏览器自动打开下载的文件

    add_header Content-Disposition "attachment;"; 举例:#所有文件都不打开 location / { add_head…

    Java 2023年5月30日
    068
  • Kafka 分区

    一、副本机制 Kafka在⼀定数量的服务器上对主题分区进⾏复制。 当集群中的⼀个broker宕机后系统可以⾃动故障转移到其他可⽤的副本上,不会造成数据丢失。 创建主题: kafka…

    Java 2023年6月5日
    070
  • MCU软件最佳实践——独立按键

    短小精悍,适用于有rtos和无rtos场合的按键驱动程序 引子 在进行mcu驱动和应用开发时,经常会遇到独立按键驱动的开发,独立按键似乎是每一个嵌入式工程师的入门必修课。笔者翻阅了…

    Java 2023年6月6日
    0112
  • Nginx 配置简述

    不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦。不…

    Java 2023年5月30日
    058
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球