首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

group by 慢查询优化

一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下: 我在测试环境构造了500万条数据,模拟了这个慢查询。...简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...二、看执行计划 可以看到,group by字段上我是加了索引的,也用到了。 三、优化 说实话,我是不知道该怎么优化的,这玩意还能怎么优化啊!先说下,下面的思路都是没用的。...思路二: where条件太复杂,没索引,导致查询慢,但我给where条件的所有字段加上了组合索引,也还是没用 思路三: 既然group by慢,换distinct试试??...虽然知道group by和distinct有很小的性能差距,但是真没想到,差距居然这么大!!!大发现啊!!

85220

解释SQL查询计划

解释SQL查询计划 本章介绍由ShowPlan生成的InterSystems SQL查询访问计划中使用的语言和术语。 存储在映射中的表 SQL表存储为一组映射。...查询访问计划(ShowPlan)是对结果指令集的可读翻译。 查询的作者可以使用这个查询访问计划来查看将如何访问数据。...在这种情况下,作者可以利用查询计划修改原始查询,为查询编译器提供更多的信息或更多的指导。 阅读计划 “ShowPlan”的结果是一系列关于访问和显示查询中指定的数据的处理的语句。...下面提供了关于如何解释ShowPlan语句的信息。 访问映射 一个查询计划可以访问多个表。...对于并行查询处理和分片,该计划显示发送到并行处理或在分片上处理的各种查询。 还将显示用于每个查询的计划。 子查询、连接和联合 给定查询中的一些子查询(和视图)也可以单独处理。

91220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    oracle分页查询解释

    ------------------------------------------ --分页的必须参数 --当前页 --每页几条数据 --一共多少页 --总记录数 ------------对于分页查询而言...from t_user t where 1=1 and rownum = 6 order by user_id; ---必须使用嵌套,必须是从1开始,如果想查询大于...2的,就是第二行以后的记录,比如使用rownum>2是查不多出来的,因为rownum总是从1开始,没有1就没有2 -- 模糊查询:t.real_name like '%赵%' --伪字段,必须使用嵌套,...使得伪字段变成物理字段,以下字段没有使用嵌套是个伪字段,所以查询不出结果 SELECT USER_ID,USER_ACCOUNT,REAL_NAME,SEX,BIRTHDAY from t_user...,一定要把查询条件放置到最内部的sql语句中 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140244.html原文链接:https://javaforall.cn

    39120

    解释SQL查询计划(一)

    解释SQL查询计划(一) SQL语句 这个SQL语句列表为每个表提供了SQL查询和其他操作的记录,包括插入、更新和删除。 这些SQL语句链接到一个查询计划,该链接提供冻结该查询计划的选项。...然后,可以: 确定每个SQL操作使用哪个查询计划。 可以决定使用反映对表定义所做更改的修改后的查询计划。 或者可以冻结当前查询计划,保留在更改表定义之前生成的查询计划。...SQL语句是在第一次准备查询时创建的。如果多个客户端发出相同的查询,则只记录第一次准备。...创建该查询计划时,将解冻该查询计划; 可以随后将该查询计划指定为冻结计划。 带有查询计划的SQL语句包括涉及SELECT操作的DML命令。...可以对表或视图发出查询。 包含JOIN的查询为每个表创建相同的SQL语句。 Location是清单中存储的每个表的相同查询。

    2.9K20

    解释SQL查询计划(二)

    解释SQL查询计划(二) SQL语句的详细信息 有两种方式显示SQL语句的详细信息: 在SQL Statements选项卡中,通过单击左侧列中的Table/View/Procedure Name链接选择一个...NULL(空白)计划状态意味着没有关联的查询计划。 自然查询Natural query:一个布尔标志,指示该查询是否是“自然查询”。 如果勾选此项,则该查询是自然查询,不会记录查询性能统计信息。...自然查询被定义为嵌入式SQL查询,它非常简单,记录统计数据的开销会影响查询性能。 将统计信息保存在自然查询上没有任何好处,因为查询已经非常简单了。...动态SQL查询(缓存查询)不会被标记为自然查询; 缓存查询的统计数据可能被记录,也可能不被记录。...平均时间Average time:运行此查询所花费的平均时间(以秒为单位)。 如果查询是缓存的查询,则查询的第一次执行所花费的时间很可能比从查询缓存中执行优化后的查询所花费的时间要多得多。

    1.7K20

    Group by中子查询order by排序失效问题分析

    通过sql分组查询数据时,一般通过group by来完成,group by默认取相同的分组列(一列或者多列)中第一个数据。...id最大的记录,我们可能想到的sql如下(name列作为分组): select id,name from (select id,name from tt order by id desc) as t group...因为mysql 5.6之后版本对排序的sql解析做了优化,子查询中的排序是会被忽略的,所以上面的order by id desc未起到作用。.../ 输出结果如下: id,name 2,name1 4,name2 其实除了group by获取分组最后一个记录之外,还可以通过关联子查询方式来实现: select id,name from tt a...by和关联子查询两种方式的实现,获取分组的最后一条记录要么直接通过分组直接来获取,要么先获取到记录关键key然后通过关键key获取对应的记录即可。

    3.1K30

    Mysql常用sql语句(12)- group by 分组查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 group by 关键字可以根据一个或多个字段对查询结果进行分组...group by 一般都会结合Mysql聚合函数来使用 如果需要指定条件来过滤分组后的结果集,需要结合 关键字;原因:where不能与聚合函数联合使用 having group by 的语法格式 GROUP...group by 单字段分组的栗子 对sex单个字段进行分组查询 select * from yyTest group by sex; ?...知识点 多个字段分组查询时,先按照第一个字段分组,如果第一个字段有相同值,则把分组结果再按第二个字段进行分组,以此类推 如果第一个字段每个值都是唯一的,则不会按照第二个字段再进行分组了,具体原理可看下图...group by + group_concat()的栗子 group_concat()可以将分组后每个组内的值都显示出来 select department,group_concat(username)

    2.1K20

    记一次神奇的sql查询经历,group by慢查询优化

    一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下: ? 我在测试环境构造了500万条数据,模拟了这个慢查询。...简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...可以看到,group by字段上我是加了索引的,也用到了。 三、优化 说实话,我是不知道该怎么优化的,这玩意还能怎么优化啊!先说下,下面的思路都是没用的。...思路二: where条件太复杂,没索引,导致查询慢,但其实哪怕where条件不动,只要把group by去掉,就非常快。所以应该也不是where条件的问题。 ?...虽然知道group by和distinct有很小的性能差距,但是真没想到,差距居然这么大!!!大发现啊!!

    1.4K20

    记一次神奇的SQL查询经历,group by慢查询优化

    我在测试环境构造了500万条数据,模拟了这个慢查询。 简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...可以看到,group by字段上我是加了索引的,也用到了。 三、优化 说实话,我是不知道该怎么优化的,这玩意还能怎么优化啊!先说下,下面的思路都是没用的。...思路二: where条件太复杂,没索引,导致查询慢,但我给where条件的所有字段加上了组合索引,也还是没用 ? ? 思路三: 既然group by慢,换distinct试试??...虽然知道group by和distinct有很小的性能差距,但是真没想到,差距居然这么大!!!大发现啊!!...最后再对比下改前后的执行计划: 改之前(查询要1分钟左右): ? 改之后(查询只要几百毫秒): ?----

    1.2K20

    深入SQL执行计划之CBO查询转换(4):Group By 配置最优机能(Group By Placement)

    之前讲过的转换是当存在 View,子查询时,把子查询展开,或者把谓词下推给子查询。 那是不是说 CBO 只是盯着 View,或子查询来做工作呢,结论当然不是了。...比如2张表进行结合,并对其中一个表进行了 Group by 操作时,如果能先进行 Group by 的结果集再和另外的表进行结合的话,可能会有更好的效果。...于是乎,就有了Group By 配置最优机能(Group By Placement)。...Group By 配置最优机能(Group By Placement) 还是老样子,先看看最初没经过转换时的样子。...C1") 当然是先正常的 t1 t2 的结合,结合后的结果再进行 GROUP BY。 接下来,我们再看看 Group By 配置最优机能动作时的样子。

    24520

    group by 报错_group by null

    ,存在则个数加1,不存在则插入新数据 mysql官方规定,查询时使用rand()函数时,该值会计算多次,即查看虚拟表中是否含有这个数据时,rand函数计算一次,当数据不存在时,会插入数据(rand函数计算的值...x (select floor(rand(0)*2) as x,count(*) from test group by x) 当查询第一个数据时,x的第一个值是0,在虚拟表中没有这个数据,所以插入数据...,count值加1,插入时floor(rand(0)*2)会再被计算一次,值为1,即插入的数据是1,并不是0 查询第二个数据,此时x的值为1,存在这个数据,count值加1,不需要插入数据,所以...floor(rand(0)*2)不会被再次计算 继续查询数据,此时x值为0,虚拟表中不存在0,所以要插入新数据,此时floor(rand(0)*2)再次被计算,值为1,但是floor(rand...(0)*2)是主键,不能被重复,所以此时会报错,报错内容是 1这个主键重复 虚拟表总共查询的次数为三次,所以floor报错注入满足的条件是数据库中要查询的数据至少3条以上。

    1.3K10

    记一次详细的的SQL查询经历,group by慢查询优化

    一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下: ? 这里测试环境构造了500万条数据,模拟了这个慢查询。...简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...可以看到,group by字段上是加了索引的,也用到了。...思路二: where条件太复杂,没索引,导致查询慢,但给where条件的所有字段加上了组合索引,没起作用。 ? ? 思路三: 既然group by慢,换distinct试试 ? 瞬间就加快了。...虽然知道group by和distinct有很小的性能差距,但是没想到,差距居然这么大。 四、你以为这就结束了吗 ---- 这个bug转给测试后,测试一测,居然还是30多秒。

    1.9K10

    SAP RETAIL 事务代码RWBE查询界面上的Plant Group

    SAP RETAIL 事务代码RWBE查询界面上的Plant Group 1,如下的plant group, 代码是Z_NM_SITEGRP , Class type 是030 - Plant 试图在执行事务代码...RWBE查询库存的时候,输入这个plant group去批量查多个工厂下某些物料的库存, 未能成功,因SAP报错说:plant group Z_NM_SITEGRP unknown. 2,点击Plant...group输入框右边的按钮去查询plant group, 在弹出的查询窗口上,系统默认是查035类型的plant group(class). 3,看这个字段的帮助文档, 说明在这个事务代码里...,如果要根据plant group进行查询,则要求该plant group的class type是035的。...然后保存, 6, 再来执行RWBE报表查询库存, 得到如下报表结果: -完- 写于2021-11-5.

    53210

    玩转Mysql系列 - 第8篇:分组查询详解(group by & having)

    本篇内容 分组查询语法 聚合函数 单字段分组 多字段分组 分组前筛选数据 分组后筛选数据 where和having的区别 分组后排序 where & group by & having & order...by & limit 一起协作 mysql分组中的坑 in多列查询的使用 分组查询 语法: SELECT column, group_function,......分组中,select后面只能有两种类型的列: 出现在group by后的列 或者使用聚合函数的列 聚合函数 函数名称 作用 max 查询指定列的最大值 min 查询指定列的最小值 count 统计查询结果的行数...建议:在写分组查询的时候,最好按照标准的规范来写,select后面出现的列必须在group by中或者必须使用聚合函数。...总结 在写分组查询的时候,最好按照标准的规范来写,select后面出现的列必须在group by中或者必须使用聚合函数。

    8.7K31

    MySQL具体解释(19)———-海量数据分页查询优化

    这个时候我们就须要找到一种更快的查询办法来替代这样的操作了。 网上已经有非常多优化的方法。...分页查询的速度基本会保持在1秒之内。...另外分享两个关于查询的技巧: (1)假设须要查询 id 不是连续的一段,最佳的做法就是先找出 id ,然后用 in 查询: 查看代码打印1 SELECT * FROM table WHERE id IN...在须要查询该字段的时候,不要直接查询字符串,效率低下。应该查诡该字串的crc32或md5值。 怎样优化Mysql千万级高速分页。下面摘抄与网上,读者自行參考。 MySql 性能究竟能有多高?...假设用复合查询,我的轻量级框架就没的用了。分页字符串还得自己写,那多麻烦?

    1.2K30

    mysql线上排错 group_concat_max_len group_concat函数 引起的查询数据丢失 实践笔记

    mysql线上排错 group_concat_max_len group_concat函数 引起的查询数据丢失 实践笔记 0.问题场景 1.写几个sql来验证。...2.这时就需要修改 group_concat_max_len 参数到需要的大小,比如102400,扩大一百倍。使得我们使用GROUP_CONCAT函数查询的时候可以正常返回。...我们可以先查出我们数据的最大长度,在用GROUP_CONCAT函数查询,对比数据长度差异,以及验证GROUP_CONCAT查出来的长度是不是1024 select user_name from sys_user...使得我们使用GROUP_CONCAT函数查询的时候可以正常返回。..."; # 在mysqld下加入 group_concat_max_len = 102400 重启生效 #再次查询group_concat_max_len的长度 show variables like

    2.6K10
    领券