03|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://www.mzph.cn/news/702229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学会字符转换

字符转换 题目描述:解法思路:解法代码:运行结果: 题目描述: 输入⼀一个字符串,将字符串中大写字母全部转为小写字母,小写字母转成大写字母,其他字符保持不变。注:字符串…

pthread_cond_timedwait()函数

绝对时间:相对于1970年1月1日0时0分0秒 相对时间:相对于当前时间,如sleep(3);相对于当前,过3s.

1110. 删点成林

1110. 删点成林 关键要点 通过O(1)时间复杂度确认节点是否需要删除 Set to_deleteSet new HashSet<>(); Arrays.stream(to_delete).forEach(to_deleteSet::add); 使用深度优先搜索&#xff08;DFS&#xff09;遍历树 node.left dfs(node.left, s, ans); node.right …

js知识点总结

单线程是异步产生的原因 事件循环是异步的实现方式 何为进程&#xff1a; 程序运行需要有它自己专属的内存空间&#xff0c;可以把这 块内存空间简单的理解为进程 &#xff08;每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;要通信需要双方同意&#xff09;…

【物联网应用案例】某制造企业电锅炉检测项目

供暖行业在我国的经济发展中占据着重要的地位&#xff0c;然而&#xff0c;长期以来&#xff0c;该行业存在着自动化水平低、管理效率不高等问题&#xff0c;制约了其持续发展。为了解决这些问题&#xff0c;吉林某电锅炉生产厂家进行了一项创新性的尝试。 该厂家通过集成物联…

组态软件在物联网中的应用

随着物联网的快速发展&#xff0c;组态软件在物联网中的应用也越来越广泛。组态软件是一种用于创建和管理物联网系统的可视化工具&#xff0c;它能够将传感器、设备和网络连接起来&#xff0c;实现数据的采集、分析和可视化。本文将探讨组态软件在物联网中的应用&#xff0c;并…

mac电脑创建data目录

开发的同学.在linux下.一些日志记录创建的/data/**目录…但是在mac电脑是没有data目录的…大家可以用这个方式来新建.亲测 1&#xff0c;在/System/Volumes/Data下创建/data目录并设置目录权限 cd /System/Volumes/Data sudo mkdir data sudo chmod -R 777 data2&#xff0c;…

【Django开发】0到1开发美多shop项目:短信验证码和RabbitMQ。全md文档笔记(附代码 文档)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现前后端…

基于虚拟力优化的无线传感器网络覆盖率matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 虚拟力优化算法 4.2 覆盖覆盖率计算 5.完整程序 1.程序功能描述 基于虚拟力优化的无线传感器网络覆盖率&#xff0c;仿真输出优化前后的网络覆盖率&#xff0c;覆盖率优化收敛迭代曲线…

jQuery瀑布流画廊,瀑布流动态加载

jQuery瀑布流画廊&#xff0c;瀑布流动态加载 效果展示 手机布局 jQuery瀑布流动态加载 HTML代码片段 <!-- mediabanner --><div class"mediabanner"><img src"img/mediabanner.jpg" class"bg"/><div class"text&qu…

【计算机网络】深度学习使用应用层的HTTP协议

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【计算机网络】深度学习使用应用层的HTTP协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 一:HTTP是什么二:HTTP请求1.HTTP请求的组成2.HTTP请求的方法…

Linux之部署前后端分离项目

Nginx配置安装 1.安装依赖 我们这里安装的依赖是有4个的 [rootlocalhost opt]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2.上传解压安装包 [rootlocalhost opt]# tar -xvf nginx-1.13.7.tar.gz -C /usr/local/java/3.安装Nginx &#xff0…

我的NPI项目之设备系统启动(八) -- Android14的GKI2.0开发步骤和注意事项

GKI是什么&#xff1f; Google为什么要推行GKI&#xff1f; GKI全称General Kernel Image。GKI在framework和kernel之间提供了标准接口&#xff0c;使得android OS能够轻松适配/维护/兼容不同的设备和linux kernel。 Google引入GKI的目的是将Framework和Kernel进一步的解耦。因…

React 中引入 CSS 高阶用法

一、是什么 组件式开发选择合适的css解决方案尤为重要 通常会遵循以下规则&#xff1a; 可以编写局部css&#xff0c;不会随意污染其他组件内的原生&#xff1b;可以编写动态的css&#xff0c;可以获取当前组件的一些状态&#xff0c;根据状态的变化生成不同的css样式&#…

conda常用命令详解

Conda 是一个功能强大的包管理器和环境管理器&#xff0c;用于安装、部署和管理软件包和其依赖关系。下面是一些常用的 Conda 命令及其详细解释&#xff1a; 创建环境&#xff1a; conda create --name myenv python3.8 创建一个名为 myenv 的环境&#xff0c;并指定 Python 版…

【NCom】:通过高温气相合成调节Pt-CeO2相互作用以提高晶格氧的还原性

摘要&#xff1a;在这项工作中&#xff0c;我们比较了通过两种方法制备的 Pt 单原子催化剂&#xff08;SAC&#xff09;的 CO 氧化性能&#xff1a;&#xff08;1&#xff09;传统的湿化学合成&#xff08;强静电吸附strong electrostatic adsorption–SEA&#xff09;&#xf…

音视频数字化(数字与模拟-电视)

上一篇文章【音视频数字化(数字与模拟-音频广播)】谈了音频的广播,这次我们聊电视系统,这是音频+视频的采集、传输、接收系统,相对比较复杂。 音频系统的广播是将声音转为电信号,再调制后发射出去,利用“共振”原理,收音机接收后解调,将音频信号还原再推动扬声器,我…

UI风格汇:极简主义(Minimalism),有人喜欢,有人唾弃。

Hello&#xff0c;我是大千UI工场&#xff0c;设计风格是我们新开辟的栏目&#xff0c;主要讲解各类UI风格特征、辨识方法、应用场景、运用方法等&#xff0c;本次带来的极简主义风格的解读&#xff0c;有设计需求&#xff0c;我们也可以接单。 一、什么是极简主义风格&#xf…

Linux 系统添加虚拟内存的方法

https://cloud.189.cn/t/6nqy2m3YnUN3 &#xff08;访问码&#xff1a;ic3i&#xff09; 云服务器 群晖NAS 切换到 root 模式 sudo su 或者 sudo -i #群晖/volume2 是你添加的硬盘挂载路径 不一定是 volume2 有可能是 volume1 #如果你只有1快硬盘 volume2 改成 volume1 …

深入剖析C语言中的段错误:从内存模型到实战调试全方位解析

引言 在C语言编程的世界里&#xff0c;段错误&#xff08;Segmentation Fault&#xff09;无疑是最常见的运行时错误之一。它源自程序对内存的非法访问&#xff0c;可能由于数组越界、野指针、悬垂指针、栈溢出等各种原因造成。本篇文章旨在带领读者深入探索C语言中的内存管理…