02|Order by与Group by优化

索引顺序依次是 : name,age,position

案例1

EXPLAIN SELECT * FROM employees WHERE name = 'LiLei' AND position ='dev' ORDER BY age;

在这里插入图片描述

分析: 联合索引中只是用到了name字段做等值查询[通过key_len 74可以看出因为name字段的len=74],在这个基础上使用了age进行排序【通过Extra: Using index condition可以看出虽然使用了联合索引但是因为中间有跳过 并没有使用到索引覆盖】

案例2

EXPLAIN SELECT * FROM employees WHERE name = 'LiLei' ORDER BY position;

在这里插入图片描述

分析:
● 根据type key key_len74可以看出使用了联合索引中的name
● 根据Extra:Using filesort可以看出使用了额外的文件排序(因为position排序不符合最左前缀的原则, 中间有断开)

案例3

EXPLAIN SELECT * FROM employees WHERE name = 'LiLei' ORDER BY age, position;

在这里插入图片描述
在这里插入图片描述
查找只用到索引name,age和position用于排序,无Using filesort。

案例4

EXPLAIN SELECT * FROM employees WHERE name = 'LiLei' ORDER BY position,age;

在这里插入图片描述

分析:
和案例3中explain的执行结果一样,但是出现了Using filesort,因为索引的创建顺序为name,age,position,但是排序的时候age和position颠倒位置了。

案例5

EXPLAIN SELECT * FROM employees WHERE name = 'LiLei' and age = 18 ORDER BY position, age;

8版本
在这里插入图片描述

分析: 和case4比较使用索引多了age len_key78
● 使用了name 和 age的索引信息
● 因为查询结果为空并没有使用extra信息

5.7版本
在这里插入图片描述

分析:
与Case 4对比,在Extra中并未出现Using filesort,因为age为常量,在排序中被优化,所以索引未颠倒,不会出现Using filesort。

案例6

EXPLAIN SELECT * FROM employees WHERE name = 'zhuge' ORDER BY age asc, position desc;

在这里插入图片描述

分析:
● 查询使用name索引字段
● 排序因为age是asc 因此不符合索引结构的排序特点, 因此使用了文件排序

案例7

EXPLAIN SELECT * FROM employees WHERE name in ('LiLei','zhuge') ORDER BY age, position;

8版本
在这里插入图片描述

分析:
● 范围查询使用name索引
● 排序断开使用了文件排序

5.7版本
在这里插入图片描述

案例8

(可以重点关注不同的范围条件可能会选择不同的执行计划,和查询结果集有关系)

EXPLAIN SELECT * FROM employees WHERE name > 'a' ORDER BY name;
EXPLAIN SELECT * FROM employees WHERE name > 'zzz' ORDER BY name;

分析:
● > 'a’会产生大量的结果集,因此范围查询没有使用索引,使用了文件排序
● > 'zzz’会产生小的结果集,因此使用了索引和Using index condition

>a优化:

EXPLAIN SELECT name,age,position FROM employees WHERE name > 'a' ORDER BY name;

在这里插入图片描述

优化总结:

1、MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低。
2、order by满足两种情况会使用Using index。
- order by语句使用索引最左前列。
- 使用where子句与order by子句条件列组合满足索引最左前列。
3、尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。
4、如果order by的条件不在索引列上,就会产生Using filesort。
5、能用覆盖索引尽量用覆盖索引
6、group by与order by很类似,其实质是先排序后分组,遵照索引创建顺序的最左前缀法则。对于group by的优化如果不需要排序的可以加上order by null禁止排序。注意,where高于having,能写在where中的限定条件就不要去having限定了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2807206.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

halcon中的一维测量

一维测量 像点到点的距离,边缘对的距离等沿着一维方向的测量都属于1D测量范畴。Halocn的一维测量首先构建矩形或者扇形的ROI测量对象,然后在ROI内画出等距离的、长度与ROI宽度一致的、垂直于ROI的轮廓线(profile line)的等距线。…

VBA实现快速逆透视

实例需求:将工作表中的数据(多维度交叉),对日期进行逆透视,转换为下表的格式。 示例代码如下。 Sub UnpivotTable()Dim oSht As WorksheetDim inLastRow As Long, inLastCol As LongDim outLastRow As Long, outCol …

python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析

文章目录 0 前言课题背景分析方法与过程初步分析:总体流程:1.数据探索分析2.数据预处理3.构建模型 总结 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到…

最简单的基于 FFmpeg 的编码器 - 纯净版(不包含 libavformat)

最简单的基于 FFmpeg 的编码器 - 纯净版(不包含 libavformat) 最简单的基于 FFmpeg 的视频编码器(YUV 编码为 HEVC(H.265))正文结果工程文件下载 最简单的基于 FFmpeg 的视频编码器(YUV 编码为 …

ES坑-创建索引使用_下划线-黑马旅游搜不到

学ES的时候,星级过滤无效 找不到数据。 需要 但是我们在创建的时候使用的是keyword 通过研究发现,我们导入数据的时候应该默认的为starName 我get库时候发现有2个字段 所以通过star_name搜索因为都是空数据搜不到,而starName类型为text所以…

UE蓝图 函数调用(CallFunction)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 UE蓝图 函数调用(CallFunction)节点和源码 文章目录 系列文章目录一、Call…

使用PM2实现高效的应用监控与管理

微信搜索“好朋友乐平”关注公众号。 1. pm2 PM2 是一个流行的进程管理器,用于 Node.js 应用程序。它支持应用程序的负载均衡、自动重启、日志管理、监控以及多环境管理等功能。PM2让开发者能够以守护进程的方式运行和管理 Node.js 应用,即使在应用崩溃…

什么是负载均衡集群?

目录 1、集群是什么? 2、负载均衡集群技术 3、负载均衡集群技术的实现 4、实现效果如图 5、负载均衡分类 6、四层负载均衡(基于IP端口的负载均衡) 7、七层的负载均衡(基于虚拟的URL或主机IP的负载均衡) 8、四层负载与七层…

消息中间件篇之RabbitMQ-消息重复消费

一、导致重复消费的情况 1. 网络抖动。 2. 消费者挂了。 消费者消费消息后,当确认消息还没有发送到MQ时,就发生网络抖动或者消费者宕机。那当消费者恢复后,由于MQ没有收到消息,而且消费者有重试机制,消费者就会再一次消…

【Java程序设计】【C00282】基于Springboot的校园台球厅人员与设备管理系统(有论文)

基于Springboot的校园台球厅人员与设备管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园台球厅人员与设备管理系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xf…

政安晨:【机器学习基础】(一)—— 泛化:机器学习的目标

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 简述 泛化是机器学习中的基本概念之一。它指的是通过学习…

代码随想录刷题第41天

首先是01背包的基础理论,背包问题,即如何在有限数量的货物中选取使具有一定容量的背包中所装货物价值最大。使用动规五步曲进行分析,使用二维数组do[i][j]表示下标从0到i货物装在容量为j背包中的最大价值,dp[i][j]可由不放物品i&a…

Linux---进程间通信(下)

1、System V 共享内存 原理如下图 系统调用接口介绍 int shmget(key_t key, size_t size, int shmflg) 功能:用来创建共享内存 参数 key:这个共享内存段名字,内核用key来标识共享内存size:共享内存大小shmflg:由九个权…

Vue局部注册组件实现组件化登录注册

Vue局部注册组件实现组件化登录注册 一、效果二、代码1、index.js2、App.vue3、首页4、登录(注册同理) 一、效果 注意我这里使用了element组件 二、代码 1、index.js import Vue from vue import VueRouter from vue-router import Login from ../vie…

独立版表情包小程序完整版源码前后端源码,附带系统搭建教程

搭建要求: 1.系统要求Nginx 1.18.0PHP-7.2mysql5.6,开启 ssl,php需要安装 sg11 扩展 2.设置伪静态 location / { index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?s$1; } } location /a…

运维的利器–监控–zabbix–第二步:建设–部署zabbix agent--windows server系统

文章目录 在windows server 2016安装zabbix agent第一步:下载windows安装agent软件第二步:解压到指定目录第三步:配置zabbix-agent.win.conf第四步:zabbix-agent安装第五步:启动zabbix-agent客户端第六步:确…

冯诺依曼体系结构 计算机组成的金字塔

01 冯诺依曼体系结构:计算机组成的金字塔 学习计算机组成原理,到底是在学些什么呢?这个事儿,一两句话还真说不清楚。不过没关系,我们先从“装电脑”这个看起来没有什么技术含量的事情说起,来弄清楚计算机到…

旋转齿轮加载

效果演示 实现了一个旋转齿轮的动画效果。具体来说,页面背景为深灰色,中间有一个齿轮装置,包括四个齿轮。每个齿轮都有内部的齿轮条,整体呈现出旋转的效果。其中,齿轮2是顺时针旋转的,齿轮1、3、4是逆时针旋…

freemarker模板引擎结合node puppeteer库实现html生成图片

效果图: 先看效果图,以下是基于freemarker模板渲染数据,puppeteer加载html中的js及最后图片生成: 背景: 目前为止,后台java根据html模板或者一个网页路径生成图片,都不支持flex布局及最新的c…

《The Art of InnoDB》第一部分|第2章:基础原理-整体架构

第2章:整体架构 目录 第2章:整体架构 2.1 单机架构 2.1.1 Mysql架构分层 2.1.2 InnoDB架构分层 2.1.3 小结 2.2 集群架构 2.2.1 主从模式 2.2.2 Cluster模式 2.2.3 主从模式和Cluste的区别 2.2.4 小结 2.3 总结 2.1 单机架构 2.1.1 Mysql架…