group by走索引吗(group by 执行流程及优化)

2024-02-27 07:40:42 19

group by走索引吗(group by 执行流程及优化)

本文目录

group by 执行流程及优化

在说group by执行流程及优化之前,要先说一下临时表。 有的人可能会认为,临时表就是内存表。但是,这两个概念可是完全不同的。 为了便于理解,我们来看下下面这个操作序列: 可以看到,临时表在使用上有以下几个特点: 由于临时表只能被创建它的 session 访问,所以在这个 session 结束的时候,会自动删除临时表。 为了便于分析,我们创建表t1来举例: 我们来看一下这个语句: 这个语句的逻辑是把表 t1 里的数据,按照 id%10 进行分组统计,并按照 m 的结果排序后输出。它的 explain 结果如下: 在 Extra 字段里面,我们可以看到三个信息: 这个语句的执行流程是这样的: 这个流程的执行图如下:把内存临时表的大小限制为最大 1024 字节,并把语句改成 id % 100,这样返回结果里有 100 行数据。但是,这时的内存临时表大小不够存下这 100 行数据,也就是说,执行过程中会发现内存临时表大小到达了上限(1024 字节)。那么,这时候就会把内存临时表转成磁盘临时表,磁盘临时表默认使用的引擎是 InnoDB。 如果这个表 t1 的数据量很大,很可能这个查询需要的磁盘临时表就会占用大量的磁盘空间。 可以看到,不论是使用内存临时表还是磁盘临时表,group by 逻辑都需要构造一个带唯一索引的表,执行代价都是比较高的。如果表的数据量比较大,上面这个 group by 语句执行起来就会很慢,我们有什么优化的方法呢? group by 的语义逻辑,是统计不同的值出现的个数。但是,由于每一行的 id%100 的结果是无序的,所以我们就需要有一个临时表,来记录并统计结果。那么,如果扫描过程中可以保证出现的数据是有序的,是不是就简单了呢?假设,现在有一个类似图 10 的这么一个数据结构,我们来看看 group by 可以怎么做。 可以看到,如果可以确保输入的数据是有序的,那么计算 group by 的时候,就只需要从左到右,顺序扫描,依次累加。也就是下面这个过程: 按照这个逻辑执行的话,扫描到整个输入的数据结束,就可以拿到 group by 的结果,不需要临时表,也不需要再额外排序。你一定想到了,InnoDB 的索引,就可以满足这个输入有序的条件。 在 MySQL 5.7 版本支持了 generated column 机制,用来实现列数据的关联更新。你可以用下面的方法创建一个列 z,然后在 z 列上创建一个索引。 如果是 MySQL 5.6 及之前的版本,你也可以创建普通列和索引,来解决这个问题 这样,索引 z 上的数据就是类似图 3 这样有序的了。上面的 group by 语句就可以改成: 从 Extra 字段可以看到,这个语句的执行不再需要临时表,也不需要排序了。 所以,如果可以通过加索引来完成 group by 逻辑就再好不过了。但是,如果碰上不适合创建索引的场景,我们还是要老老实实做排序的。那么,这时候的 group by 要怎么优化呢? 如果我们明明知道,一个 group by 语句中需要放到临时表上的数据量特别大,却还是要按照“先放到内存临时表,插入一部分数据后,发现内存临时表不够用了再转成磁盘临时表”,看上去就有点儿傻。 在 group by 语句中加入 SQL_BIG_RESULT 这个提示(hint),就可以告诉优化器:这个语句涉及的数据量很大,请直接用磁盘临时表。 MySQL 的优化器一看,磁盘临时表是 B+ 树存储,存储效率不如数组来得高。所以,既然你告诉我数据量很大,那从磁盘空间考虑,还是直接用数组来存吧。因此,下面这个语句 的执行流程就是这样的: 根据有序数组,得到数组里面的不同值,以及每个值的出现次数。下面分别是执行流程图和执行 explain 命令得到的结果。 从 Extra 字段可以看到,这个语句的执行没有再使用临时表,而是直接用了排序算法。

mysql中的索引,在什么时候开始起作用.onwheregroup byhaving

让groupby使用索引而不创建临时表,使用索引的前提条件是:所有GROUPBY列引用同一索引的属性,并且索引按顺序保存其关键字(B-树索引,不是HASH索引)至于DISTINCT和GROUPBY哪个效率更高?理论上DISTINCT操作只需要找出所有不同的值就可以了。而GROUPBY操作还要为其他聚集函数进行准备工作。从这一点上将,GROUPBY操作做的工作应该比DISTINCT所做的工作要多一些。但是实际上,DISTINCT操作,它会读取了所有记录;GROUPBY需要读取的记录数量与分组的组数量一样多,比实际存在的记录数目要少很多。

MySQL何时使用索引与不使用索引

所有原则都建立在最左匹配原则上,如果多个字段同时匹配,则最左匹配1、假如表的主键在id1上(有先后顺序),如果使用id1查询则使用索引,如果使用id2则不使用索引2、order by 不使用索引3、group by 使用索引时,字段在第一个字段时 ,使用索引,字段在第二个字段时,不使用索引4、in查询操作,查询字段在第一个字段时 ,使用索引,查询字段在第二个字段时,不使用索引(not in在表中的查询数量大于30%的时候是全表扫描的,用不到索引。所以没有可以优化的。) 5、like 查询操作,如果第一个字符不是正则符号,则查询字段在第一个字段时 ,使用索引,查询字段在第二个字段时,不使用索引如果第一个字符是正则符号,则都不使用索引6、如果没有搜索条件、没有排序条件、没有group by条件时,就不使用索引7、union 查询操作,哪个字段是第一个索引字段,就在那个查询子句上使用索引

mysql group by 与join 连用注意事项

  1. 如果GROUP BY 的列没有索引,产生临时表.   2. 如果GROUP BY时,SELECT的列不止GROUP BY列一个,并且GROUP BY的列不是主键 ,产生临时表.   3. 如果GROUP BY的列有索引,ORDER BY的列没索引.产生临时表.   4. 如果GROUP BY的列和ORDER BY的列不一样,即使都有索引也会产生临时表.   5. 如果GROUP BY或ORDER BY的列不是来自JOIN语句第一个表.会产生临时表.   6. 如果DISTINCT 和 ORDER BY的列没有索引,产生临时表. 1、执行FROM语句 2、执行ON过滤 3、添加外部行 4、执行where条件过滤 5、执行group by分组语句 6、执行having 7、select列表 8、执行distinct去重复数据 9、执行order by字句 10、执行limit字现在有这么两章表 学生表和分数表,现在需要查出每个班在11点到14点考试的科目,最高分数的学生,以及班级,姓名,和分数 SELECT NAME,score FROM score_record INNER JOIN user_info ON user_info.id = score_record.user_id WHERE create_time BETWEEN ’2019-01-01 11:00:00’ AND ’2019-01-01 14:00:00’ GROUP BY classes ORDER BY score DESC 

MySQL怎么禁止使用缓存以及复杂多表查询的索引优化问题

1、query_cache_size=0 已经禁用了查询缓存,但表数据可能缓存了,flush tables试试,不过操作系统还有一个硬盘缓存,想跟第一次查询之前的状态一致恐怕只能每次重启2、group by与order by不会用索引的,索引最大的用处就是减小磁盘IO,也就是where时尽量少磁盘IO并读出所有满足条件的记录

记一次MySQL Group by 的坑

表结构如下: 业务需要将表中重复数据删除,所以需要按照 组合唯一索引键筛选出重复的数据进行删除。SQL如下: 表中有符合索引 KEY column1_column2_index ( column1 , column2 ) sql语句 Group by 也是按照最左匹配原则顺序写的 group by 的字段,但是每次执行SQL耗时都是好几十秒 explain 该 sql 发现,并没有走表中存在的复合索引,而是直接走的 File sorted(文件排序);group by 语句其实是有要先排序再分组的; 问题的关键定位到没有没有命中表中的复合索引,那为何 group by 字段前两个就是复合索引,只是最后两个不是,为何没有走索引呢?不是索引只要满足最左匹配原则就可以命中吗? 分析后发现,索引可以用在两个地方,1 被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度。2 快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 本处就是可以使用索引做排序使用,而避免文件排序;此处要命中索引,走索引排序,必须要表中有一个复合索引包含 group by 的所有字段且顺序一致; 网上有部分博客说 group by 自带的排序和 order by 排序,走不走索引的规则是一样的,这里本人测试了一下,添加 group by 后面所有顺序字段的复合索引对 group by 的查询时间有直接的影响,从 30多秒 优化到 3秒; 但是对如下SQL 的执行时间也有影响,但是远远没有对group by 的影响大,如下sql,添加 order by 的全索引后 只能从30多秒优化到 10 多秒 select column2 from am_cm_relationship order by column1,column2,column3,column4 ;

oracle 中 in ,between,大于小于,走不走索引

①.有大量重复值、且经常有范围查询(between, 》,《 ,》=,《 =)和order by、group by发生的列,可考虑建立群集索引; ②.经常同时存取多列,且每列都含有重复值可考虑建立组合索引; ③.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列(1)‘!=’ 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中. (2) ‘||’是字符连接函数. 就象其他函数那样, 停用了索引. (3) ‘+’是数学函数. 就象其他数学函数那样, 停用了索引. (4)相同的索引列不能互相比较,这将会启用全表扫描.

mysql的group by怎么优化

在某些情况中,MySQL能够做得更好,通过索引访问而不用创建临时表。GROUP BY使用索引的最重要的前提条件是 所有GROUP BY列引用同一索引的属性,并且索引按顺序保存(例如,这是B-树索引,而不是HASH索引)。是否用索引访问来代替临时表的使用还取决于在查询中使用了哪部分索引、为该部分指定的条件,以及选择的累积函数。有两种方法可以通过索引优化GROUP BY语句:1,组合操作结合所有范围判断式使用(如果有)。2,首先执行范围扫描,然后组合结果元组。

Mysql索引生效条件是什么

假设index(a,b,c)最左前缀匹配:模糊查询时,使用%匹配时:’a%‘会使用索引,’%a‘不会使用索引条件中有or,索引不会生效a and c,a生效,c不生效b and c,都不生效a and b 》 5 and c,a和b生效,c不生效。

group by走索引吗(group by 执行流程及优化)

本文编辑:admin

更多文章:


office2003精简版(怎样下载Microsoft Office 2003软件)

office2003精简版(怎样下载Microsoft Office 2003软件)

大家好,关于office2003精简版很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于怎样下载Microsoft Office 2003软件的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下

2024年6月11日 22:29

东方卫视今晚回看回放(2022东方卫视春晚完整版回放为什么没有)

东方卫视今晚回看回放(2022东方卫视春晚完整版回放为什么没有)

本篇文章给大家谈谈东方卫视今晚回看回放,以及2022东方卫视春晚完整版回放为什么没有对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录2022

2024年8月28日 22:01

mp3转mp4在线转换器(如何将歌曲MP3格式转换成MP4格式,如何操作转换器请具体说明)

mp3转mp4在线转换器(如何将歌曲MP3格式转换成MP4格式,如何操作转换器请具体说明)

本篇文章给大家谈谈mp3转mp4在线转换器,以及如何将歌曲MP3格式转换成MP4格式,如何操作转换器请具体说明对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收

2024年7月20日 17:25

qq音乐安装(qq音乐怎么安装)

qq音乐安装(qq音乐怎么安装)

其实qq音乐安装的问题并不复杂,但是又很多的朋友都不太了解qq音乐怎么安装,因此呢,今天小编就来为大家分享qq音乐安装的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录qq音乐怎么安装五菱星辰混动怎么装qq音乐维纳

2024年4月11日 04:35

仙侠网游排行(你有哪些仙侠类游戏推荐)

仙侠网游排行(你有哪些仙侠类游戏推荐)

本文目录你有哪些仙侠类游戏推荐好玩的仙侠网络游戏仙侠游戏排行榜是怎样的哪款最受欢迎仙侠游戏排行榜前十你有哪些仙侠类游戏推荐仙侠手游哪个好玩,2022仙侠手游推荐大全,为大家带来了超级好玩的仙侠手游,广交好友,红颜知己与你携手作战,百变华丽的

2024年6月24日 00:55

中国农业银行手机掌上银行app下载(怎么下载中国农业银行手机银行)

中国农业银行手机掌上银行app下载(怎么下载中国农业银行手机银行)

本篇文章给大家谈谈中国农业银行手机掌上银行app下载,以及怎么下载中国农业银行手机银行对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录怎么下

2024年7月17日 18:20

《前列腺刺激》txt下载(怎样刺激前列腺)

《前列腺刺激》txt下载(怎样刺激前列腺)

今天给各位分享怎样刺激前列腺的知识,其中也会对怎样刺激前列腺进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录怎样刺激前列腺怎么能刺激前列腺前列腺炎怎么引起的前列腺刺激怎么没有快感前列腺刺激怎么用前列腺增生的症状

2024年9月27日 03:30

京东微选现在访问入口在哪里 在微信购物里找不到入口了?微选怎么发布宝贝急急急!

京东微选现在访问入口在哪里 在微信购物里找不到入口了?微选怎么发布宝贝急急急!

本文目录京东微选现在访问入口在哪里 在微信购物里找不到入口了微选怎么发布宝贝急急急!京东微选现在访问入口在哪里 在微信购物里找不到入口了微选是微选京东最近推出的一个功能。微选入口在哪首先我们登录微信账号,找到 发现-进入发现选项,往下拉找到

2024年6月19日 18:15

滴滴顺风车app下载(滴滴顺风车微信注册好了还要下载吗)

滴滴顺风车app下载(滴滴顺风车微信注册好了还要下载吗)

本篇文章给大家谈谈滴滴顺风车app下载,以及滴滴顺风车微信注册好了还要下载吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录滴滴顺风车微信注

2024年4月12日 21:30

青铜峡政务网(青铜峡的行政区划)

青铜峡政务网(青铜峡的行政区划)

本文目录青铜峡的行政区划青铜峡中华黄河楼2021最新整治方案是什么,会被拆除宁夏青铜峡中考录取分数线是多少青铜峡小坝政务局可以办身份证吗宁夏青铜峡在哪里宁夏青铜峡有民生银行在那青铜峡的行政区划 1985年7月,撤销瞿靖乡,改置为瞿靖镇。9月

2023年5月6日 02:40

oa管理软件(oa办公系统软件哪家好)

oa管理软件(oa办公系统软件哪家好)

本篇文章给大家谈谈oa管理软件,以及oa办公系统软件哪家好对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录oa办公系统软件哪家好oa软件有哪

2024年6月25日 20:06

hai360(我想问下hai360海外购到底怎么样 请用过的人帮我分析一下谢谢了)

hai360(我想问下hai360海外购到底怎么样 请用过的人帮我分析一下谢谢了)

本文目录我想问下hai360海外购到底怎么样 请用过的人帮我分析一下谢谢了hai360海外代购可信吗一般的代购都需要支付关税,在hai360上购物关税是怎么计算的呢hai360的一系列问题我想问下hai360海外购到底怎么样 请用过的人帮我

2024年7月24日 13:34

手机游戏开挂神器下载(光遇开挂用什么软件)

手机游戏开挂神器下载(光遇开挂用什么软件)

各位老铁们好,相信很多人对手机游戏开挂神器下载都不是特别的了解,因此呢,今天就来为大家分享下关于手机游戏开挂神器下载以及光遇开挂用什么软件的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录光遇开挂用什么软件小小英雄

2024年7月22日 22:18

asas可以加比较级或者最高级吗?asas倒装用法

asas可以加比较级或者最高级吗?asas倒装用法

本文目录asas可以加比较级或者最高级吗asas倒装用法一些英语词组的搭配asas前面可以加什么,后面有asas中间加什么词性asas用法asas是什么意思用asas造句,两个形容词,一个副词asas可以加比较级或者最高级吗在非正式场合(尤

2024年5月20日 14:16

页面设置在哪里(excel中的页面设置在哪里)

页面设置在哪里(excel中的页面设置在哪里)

本文目录excel中的页面设置在哪里电脑word页面设置在哪里excel中的页面设置在哪里您好,方法1、打开电脑文件夹,双击进入到excel文档。2、点击上方的页面布局,继续下一步的操作。3、点击上方的菜单栏,选择纸张大小进行设置。4、在弹

2023年10月29日 16:20

佳能的g12(佳能g12是不是单反 有用吗)

佳能的g12(佳能g12是不是单反 有用吗)

本文目录佳能g12是不是单反 有用吗佳能g12的摄像功能怎么用佳能G12算是什么相机有关佳能G12佳能G12的优势与劣势佳能G12的夜景拍摄效果怎么样佳能g12是不是单反 有用吗所谓单反是指单镜头反光式取景相机,佳能G12不是反光式取景,而

2024年6月21日 02:16

一键重装系统win7旗舰版(怎么样一键重装系统win7旗舰版)

一键重装系统win7旗舰版(怎么样一键重装系统win7旗舰版)

大家好,关于一键重装系统win7旗舰版很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于怎么样一键重装系统win7旗舰版的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所

2024年7月8日 03:45

java安装程序下载(下载的java怎样安装)

java安装程序下载(下载的java怎样安装)

本文目录下载的java怎样安装手机JAVA程序怎么下载安装java语言安装程序哪里有下载JAVA安装程序下载问题请问java的安装程序怎么下啊 在那下啊下载的java怎样安装1、下载完成之后,点击exe进行安装,出现如下图,点击“下一步”

2024年6月6日 04:42

方正证券app 下载安装(方正证券app怎么更新成这样)

方正证券app 下载安装(方正证券app怎么更新成这样)

今天给各位分享方正证券app怎么更新成这样的知识,其中也会对方正证券app怎么更新成这样进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录方正证券app怎么更新成这样方正证券的业务在网上开通不了怎么办方正证券手机

2024年8月18日 06:10

东方万里行官方网(东方万里行官方网太差劲了,总说系统繁忙,无法注册,这是为什么啊)

东方万里行官方网(东方万里行官方网太差劲了,总说系统繁忙,无法注册,这是为什么啊)

本文目录东方万里行官方网太差劲了,总说系统繁忙,无法注册,这是为什么啊东方万里行卡号怎么登陆东方万里行会员怎么增加护照号东航的东方万里行会员怎样申请啊东航的“东方万里行”会员怎么注册东方万里行官方网太差劲了,总说系统繁忙,无法注册,这是为什

2023年10月14日 17:40

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1731
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1156
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索