MYSQL distinct 和group by 同时使用性能急剧下降

语句:select distinct a from A group by a

当记录数上万,执行时间将达到30秒左右。

修改为 select distinct a from (select a from A group by a),执行时长会在1秒以内。

对比两条SQL 语句执行记录,发现修改前Handler_read_rnd_next 数量高达1亿,修改后这条记录降低到7万左右。

Handler_read_rnd_next: 从数据节点读取下一条数据的次数 。

另外修改后,解释器中增加了Using temporary,使用了临时表进行distinct 操作。

为什么会出现这种情况呢?

按照网上说法,distinct 和group by 同时使用时,先group by ,再distinct 。这个过程中,group by 应该必然会产生临时表才对。

Mysql数据库group by原理详解_Mysql_脚本之家

explain select city ,count(*) as num from staff group by city;

我们一起来看下这个SQL的执行流程哈

  • 创建内存临时表,表里有两个字段city和num;
  • 全表扫描staff的记录,依次取出city = 'X'的记录。
  • 判断临时表中是否有为 city='X'的行,没有就插入一个记录 (X,1);
  • 如果临时表中有city='X'的行的行,就将x 这一行的num值加 1;
  • 遍历完成后,再根据字段city做排序,得到结果集返回给客户端。

distinct :会将全部内容存储到一个hash结构中,最后通过计算hash结构中的key的个数得到结果。典型的以空间换时间的方式。

group by:先将字段排序,一般使用sort,然后进行计数,典型的以时间换空间。

数据越是离散,distinct 需要消耗的空间越大,效率越低,group by 的空间优势就比较明显;数据越集中,distinct 效率则更高。

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

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

相关文章

智慧灯杆-智慧城市照明现状分析(1)

城市道路照明是城市公共设施的重要组成部分,而随着城镇化建设的推进,城市道路照明路灯的数量越来越多,能耗越来越高,供电趋于紧张。此外,城市照明的维护工作和高昂的维护成本(人工控制、路灯巡查等),给城市管理造成了巨大的困难。管理部门需要更有效率的管理和节能方案…

支持向量机 SVM | 线性可分:软间隔模型

目录 一. 软间隔模型1. 松弛因子的解释小节 2. SVM软间隔模型总结 线性可分SVM中,若想找到分类的超平面,数据必须是线性可分的;但在实际情况中,线性数据集存在少量的异常点,导致SVM无法对数据集线性划分 也就是说&…

Kubernetes Operator开发实践

Operator 介绍 Operator 可以看成是 CRD Controller 的一种组合资源。Kubernetes 中的基础资源类型有 Pod、Service、Job、Deployment 等表达能力有限,CRD 则提供了创建新的资源类型方式;Controller 监听 CRD 对象实例的增、删、改事件,然后…

独孤思维:99%副业赚不到钱的原因

什么都学等于什么都不会。 什么都做等于什么都没做。 我遇到很多做副业的小白,开始信誓旦旦的说这个也要学,那个也要学,这个项目不错,那个项目也不错。 但结果99%的人都做不起来,连一个项目都没有跑通。 贪得无厌&…

GIS在地质灾害危险性评估与灾后重建中的应用

地质灾害是指全球地壳自然地质演化过程中,由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下,地质灾害在世界范围内频繁发生。我国除滑坡灾害外,还包括崩塌、泥石流、地面沉…

GSA、GSEA、ssGSEA、GSVA用到的统计学知识点

文章目录 概率密度函数(probability density function,PDF)分布函数(Cumulative Distribution Function,CDF)核密度估计(KDE)经验累计分布函数(Empirical Cumulative Dis…

深入理解Vue.js的模板语法和数据绑定

Vue.js背景介绍 Vue.js 是一款流行的前端 JavaScript 框架,由**尤雨溪(Evan You)**开发并于2014年首次发布。Vue.js 的设计目标是通过简单易用的语法和灵活的组件化架构,帮助开发者构建交互性强、响应速度快的现代Web应用程序。 …

source not found for数组a的引用Exception

identityHashCode(数组名) adressidentityHashCode(a)//将得到数组a的哈希值。在同一个数据类型下,同一对象的哈希值是一样的,同一哈希值对应同一对象。由于不同数据类型的变量哈希值生成算法不同,所以在数据类型不同的情况下&am…

关于esp8266的一些经验汇总,新手必看

说实话,esp8266的nodemcu 已经使用了2年多了,各种问题遇到过,就尝试各种解决,而现在回头来看真的是稀里糊涂的在用,当然这个问题也同样涉及到esp32. 因为最近打算自己打一块esp8266的板,之前打的比较多的是…

Redis冲冲冲——Redis分布式锁如何实现

目录 引出Redis分布式锁如何实现Redis入门1.Redis是什么?2.Redis里面存Java对象 Redis进阶1.雪崩/ 击穿 / 穿透2.Redis高可用-主从哨兵3.持久化RDB和AOF4.Redis未授权访问漏洞5.Redis里面安装BloomFilte Redis的应用1.验证码2.Redis高并发抢购3.缓存预热用户注册验证…

从根到叶:深入理解二叉搜索树

我们的心永远向前憧憬 尽管活在阴沉的现在 一切都是暂时的,转瞬即逝, 而那逝去的将变为可爱 &#x1f31d;(俄) 普希金 <假如生活欺骗了你> 1.二叉搜索树的概念 概念:搜索树&#xff08;Search Tree&#xff09;是一种有序的数据结构&#xff0c;用于存储和组…

github操作记录(踩坑)

github是程序员绕不开的东西。 网站打不开&#xff1f; 向雇主或有关部门申请合法信道连接互联网。 明明账号密码都对却登录失败&#xff1f; 向雇主或有关部门申请合法信道连接互联网。 重置密码失败&#xff1f; 向雇主或有关部门申请合法信道连接互联网。 TortoiseGit如…

模型压缩-剪枝算法概述

文章目录 1. 前言1.1 模型剪枝定义2 深度神经网络的稀疏性2.1,权重稀疏2.2 激活稀疏2.3 梯度稀疏2.4,小结3. 结构化稀疏3.1,结构化稀疏分类3.1.1 Channel/Filter 剪枝3.1.2 阶段级别剪枝3.2 结构化稀疏与非结构化稀疏比较参考资料参考自:

Facebook商城号为什么被封?防封养号技巧

由于Facebook商城的高利润空间&#xff0c;越来越多的跨境电商商家注意到它的存在。Facebook作为全球最大、用户量最大的社媒平台&#xff0c;同时也孕育了一个巨大的商业生态&#xff0c;包括广告投放、商城交易等。依托背后的大流量&#xff0c;Facebook商城起号较快&#xf…

优思学院|拉丁方实验设计是什么?

今天&#xff0c;我要给大家带来一个六西格玛实验设计的小窍门——拉丁方设计。这是一种巧妙的方式&#xff0c;帮助我们探索不同因素&#xff08;输入&#xff09;对结果&#xff08;输出&#xff09;的影响&#xff0c;同时巧妙地处理那些我们不想要的“噪音因素”。 想象一…

Linux 常用命令汇总(三):查看文件 内容处理

一、查看文件及内容处理命令 1.1 cat 1.1.1 介绍 cat 是 Linux 和其他 Unix-like 系统中一个非常基础且常用的命令&#xff0c;用于显示、合并或复制文本文件的内容 1.1.2 使用方法 cat [选项] [文件...] 1.1.3 参数详解 [选项]&#xff1a;控制 cat 命令的行为。[文件.…

vscode 远程开发golang

1.安装配置golang 下载解压 wget golangurl tar -xzvf golang 解压到/usr/local环境配置 在~/.bashrc文件最后加入下面三行 export GOROOT/usr/local/go # 这里就是go的源码目录 export PATH$PATH:$GOROOT/bin export GOPATH$HOME/goProject # 这里是home目录下的你自己建…

HEUFT电源维修x-ray发生器维修HBE211226

HEUFT电源维修x-ray发生器维修HBE211253;海富HEUFT在线液位检测X射线发生器维修&#xff0c;不限型型号系列。 德国海富推出HEUFT在线液位检测装置,满瓶检测系统HEUFT有着强大的功能,它的模块机构能整合很多程序,并依据不同的产品及其包装特性,照相技术,高频技术或X-ray技术。…

LInux-多线程基础概念

文章目录 前言预备页表详解缺页中断页表的映射 一、多线程是什么&#xff1f;轻量级进程 二、Pthread库pthread_create 前言 从本章的多线程开始&#xff0c;我们开始进入Linux系统的尾声&#xff0c;所以&#xff0c;在学习多线程的过程中&#xff0c;我们也会逐步对之前的内…

邮件营销新手必读指南?怎样做好邮件营销?

邮件营销的全流程及步骤&#xff1f;做好邮件营销有哪些注意点&#xff1f; 邮件营销作为一种传统却依然高效的推广手段&#xff0c;被众多企业所青睐。对于新手来说&#xff0c;如何开展邮件营销&#xff0c;却是一个值得探讨的话题。AokSend将为你提供一份邮件营销新手必读指…