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

如上图数据,是我查询了语句
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

所以当我们期望查询的结果有序的时候,一定要在查询的语句中加上自己的order by,而不能因为默认排序了,就不加order by,因为MySQL的机制他是不定的。
mysql查询的时候没有加order by时的默认排序问题的更多相关文章
- mysql 查询结果为null 或 空字符串时,返回指定字符串
直接上代码, 亲测可用: SELECT IF ( ifnull( 字段, '' ) = '', '返回的字符串', 字段) AS 别名(或者不要也可以) FROM table
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- mysql查询order by 指定字段排序
当MySQL查询时排序的字段不是数字时而是汉字的时候也可以用when then 来指定排序. 列如yewu_check表的status 字段不是0,1,2而是汉字待办,已办,退回.可以如下写法: S ...
- MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)
在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:
- mysql 查询重复的(不区分大小写)数据的SQL优化
在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写.如: select * from staticcatalogue WHERE UPPER( ...
- Mysql 查询练习
Mysql 查询练习 ---创建班级表 create table class( cid int auto_increment primary key, caption ) )engine=innodb ...
- mysql查询操作之单表查询、多表查询、子查询
一.单表查询 单表查询的完整语法: .完整语法(语法级别关键字的排列顺序如下) select distinct 字段1,字段2,字段3,... from 库名.表名 where 约束条件 group ...
- mysql查询慢之后
|--缘起:早上刚一到公司就反映公司网站爆卡,线上erp完全无法使用,赶紧扔掉手中包子. --------------------------------------- |--排查:开发中会经常发现开 ...
- 通过force index了解的MySQL查询的性能优化
查询是数据库技术中最常用的操作.查询操作的过程比较简单,首先从客户端发出查询的SQL语句,数据库服务端在接收到由客户端发来的SQL语句后, 执行这条SQL语句,然后将查询到的结果返回给客户端.虽然过程 ...
随机推荐
- linux7,一台物理机上使用VM装多个虚拟机,始终只有一个虚拟机网络正常,其他虚拟机报错Error: Connection activation failed: No suitable device found for this connection.
今天在VM新装了一个虚拟机,结果发现原来的虚拟机连不上了,重启网络服务后报错 Error: Connection activation failed: No suitable device found ...
- 手机访问web网页,使得显示自适应
//禁止浏览器伸缩<meta name="viewport" content="user-scalable=0">//手机访问web网页,使得显示自 ...
- windows更改pip源(可用)
中国科学技术大学 : https://pypi.mirrors.ustc.edu.cn/simple 清华:https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣:ht ...
- spring cloud --- config 配置中心 [本地、git获取配置文件]
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 spring cloud config 配置中心是什么? 为了统一管理配 ...
- 自定义异步爬虫架构 - AsyncSpider
作者:张亚飞 山西医科大学在读研究生 1. 并发编程 Python中实现并发编程的三种方案:多线程.多进程和异步I/O.并发编程的好处在于可以提升程序的执行效率以及改善用户体验:坏处在于并发的程序不容 ...
- Hive实现网站PV分析
原文链接: https://www.toutiao.com/i6773241257528394248/ 之前我们做过<java mapreduce实现网站PV分析>,这次我们可以用hive ...
- HttpRunner3的HTTP请求是怎么发出去的
在HttpRunner3的示例代码中,发送HTTP请求的代码是这样写的: from httprunner import HttpRunner, Config, Step, RunRequest, Ru ...
- 【Java】包装类
文章目录 包装类 什么是包装类 基本数据类型-->包装类 包装类-->基本数据类型 自动装箱与自动拆箱 基本数据类型.包装类与String的转换 基础数据类型.包装类-->Strin ...
- Electron+Vue开发跨平台桌面应用
Electron+Vue开发跨平台桌面应用 xiangzhihong发布于 2019-12-23 虽然B/S是目前开发的主流,但是C/S仍然有很大的市场需求.受限于浏览器的沙盒限制,网页应用无法满足某 ...
- [MRCTF2020]Ezaudit
[MRCTF2020]Ezaudit 知识点 1.源码泄露 2.伪随机数 3.sql注入? 题解 打开题目是个漂亮的前端,扫一下发现www.zip文件泄露,下载审计 <?php header(' ...