当前位置: 首页 > news >正文

mysql中groupby会用到索引吗_MySQL优化GROUP BY方案

满足GROUPBY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表。

执行GROUPBY子句的最一般的方法:先扫描整个表,然后创建一个新的临时表,表中每个组的所有行应为连续的,最后使用该临时表来找到组并应用聚集函数(如果有聚集函数)。在某些情况中,MySQL通过访问索引就可以得到结果,而不用创建临时表。此类查询的EXPLAIN输出显示Extra列的值为Usingindexforgroup-by。

一、松散索引扫描

1.满足条件

①查询针对一个表。

②GROUPBY使用索引的最左前缀。

③只可以使用MIN()和MAX()聚集函数,并且它们均指向相同的列。

2.示例

表t1(c1,c2,c3,c4)有一个索引idx(c1,c2,c3):

不满足条件示例:

1.除了MIN()或MAX(),还有其它累积函数,例如:

SELECTc1,SUM(c2)FROMt1GROUPBYc1;

2.GROUPBY子句中的域不引用索引开头,例如:

SELECTc1,c2FROMt1GROUPBYc2,c3;

3.查询引用了GROUPBY部分后面的关键字的一部分,并且没有等于常量的等式,例如:

SELECTc1,c3FROMt1GROUPBYc1,c2;

二、紧凑索引扫描

如果不满足松散索引扫描条件,执行GROUPBY仍然可以不用创建临时表。如果WHERE子句中有范围条件,该方法只读取满足这些条件的关键字。

否则,进行索引扫描。该方法读取由WHERE子句定义的范围。

1.GROUPBY中有一个漏洞,但已经由条件c2='a'覆盖。

SELECTc1,c2,c3FROMt1WHEREc2='a'GROUPBYc1,c3;

2.GROUPBY不是满足最左前缀,但是有一个条件提供该元素的常量:

SELECTc1,c2,c3FROMt1WHEREc1='a'GROUPBYc2,c3;

默认情况下,MySQL排序所有GROUPBYcol1,col2,....,查询的方法如同在查询中指定ORDERBYcol1,col2,...。如果显式包括一个包含相同的列的ORDERBY子句,MySQL可以毫不减速地对它进行优化,尽管仍然进行排序。

如果查询包括GROUPBY但你想要避免排序结果的消耗,你可以指定ORDERBYNULL禁止排序。例如:

INSERTINTOfoo

SELECTa,COUNT(*)FROMbarGROUPBYaORDERBYNULL;

小编结语:

更多内容尽在课课家教育!

相关文章:

  • php5.6的apaches的dll_win7(64位)php5.6-Apache2.4-mysql5.6环境安装
  • freemarker反向取数_freemarker 取值(插值)(转)
  • miui 谷歌框架_谷歌和高通正式联手,加强安卓系统掌控,华为:鸿蒙正全面超越...
  • python 随机打乱列表_python打乱列表
  • 图片画圈画箭头用什么软件_什么软件可以在编辑图片中画圈圈,如裁图时需要特..._网络编辑_帮考网...
  • 0 win10重装partition_gpt分区无法安装win10的根本原因
  • python csv库下载_Python标准库--csv模块
  • kafka身份认证 maxwell_python – kafka身份验证和授权
  • python类的封装是什么意思_Python中什么是面向对象-封装
  • 瑞银监控机器人组装法_“机器人革命”来了!瑞银计划年内再扩充400台自动化机器人...
  • laravel 控制器中使用中间件_热式气体质量流量控制器在流量监测和气压测试中的使用情况...
  • linux vim 添加注释_【Linux】Vim编辑器-批量注释与反注释
  • arduino判断是否连接串口_Arduino-串口函数Serial
  • 大数据管家abm 计算机任务监控_大数据岗位要求之大数据运维
  • 转232 乱码_rs485转rs232串口转换器应用介绍及常见故障分析
  • SegmentFault for Android 3.0 发布
  • ES6--对象的扩展
  • Javascript 原型链
  • 回顾 Swift 多平台移植进度 #2
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 使用 Docker 部署 Spring Boot项目
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 协程
  • 学习笔记:对象,原型和继承(1)
  • 异步
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • NLPIR智能语义技术让大数据挖掘更简单
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #AngularJS#$sce.trustAsResourceUrl
  • (11)MSP430F5529 定时器B
  • (C++)八皇后问题
  • (TOJ2804)Even? Odd?
  • (多级缓存)多级缓存
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十八)SpringBoot之发送QQ邮件
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)【Hibernate总结系列】使用举例
  • (转)linux下的时间函数使用
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET 的程序集加载上下文
  • .Net的DataSet直接与SQL2005交互
  • // an array of int
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [APUE]进程关系(下)
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [ComfyUI进阶教程] animatediff视频提示词书写要点
  • [CSS]中子元素在父元素中居中
  • [C语言]——分支和循环(4)
  • [Design Pattern] 工厂方法模式
  • [GN] DP学习笔记板子