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

group by 慢查询优化

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

81120

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

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

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

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

    作者:dijia478 链接:https://www.cnblogs.com/dijia478 一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql...我在测试环境构造了500万条数据,模拟了这个慢查询。 简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...可以看到,group by字段上我是加了索引的,也用到了。 三、优化 说实话,我是不知道该怎么优化的,这玩意还能怎么优化啊!先说下,下面的思路都是没用的。...思路二: where条件太复杂,没索引,导致查询慢,但我给where条件的所有字段加上了组合索引,也还是没用 ? ? 思路三: 既然group by慢,换distinct试试??...③调整where条件里字段的查询顺序,有索引的放前面。 ④给所有where条件的字段加组合索引。 ⑤用子查询的方式,先查where条件里的内容,再去重。

    1.2K20

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

    一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下: ? 这里测试环境构造了500万条数据,模拟了这个慢查询。...简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...可以看到,group by字段上是加了索引的,也用到了。...思路二: where条件太复杂,没索引,导致查询慢,但给where条件的所有字段加上了组合索引,没起作用。 ? ? 思路三: 既然group by慢,换distinct试试 ? 瞬间就加快了。...③调整where条件里字段的查询顺序,有索引的放前面。 ④给所有where条件的字段加组合索引。 ⑤用子查询的方式,先查where条件里的内容,再去重。

    1.9K10

    条件简化&子查询(1)--Mysql基于规则优化(四十四)

    连接查询成本(2)---mysql进阶(四十二) 基于规则优化 有的时候,会有一些不是很好的sql语句,但mysql依然会把这些sql优化成较高性能来执行,这可以称查询重写。...= 5) 很明显这里面有两个条件已经知道是true和false了,所以可以优化成 (a < 1 and TRUE) OR (a = 6 OR FALSE) 继续优化 a < 1 OR a = 6 表达式计算...Having和where语句合并,如果查询语句里没有sum,max等聚集函数及其group by,优化器会合并他们。 常量表检测: 查询表中只有一条或者没有数据。...外连接消除 我们回顾一下,内连接和外连接的区别,内连接用on查询出过滤条件如果无法满足是会直接舍弃的,而且驱动表和被驱动表是可以优化的,而外连接分为左连接和右连接,若on的条件不满足,则被驱动表的数据也会查询出来...这时候会优化表的查询顺序,选出最优执行计划。

    45320

    MySQL数据库篇---对数据库,数据库中表,数据库中表的记录进行添修删查操作---保姆级教程

    给考试成绩综合取别名 条件查询 使用where子句 查询学生李四的成绩 查询名字叫李四的同学,并且英语成绩大于90分---条件查询 查询姓李的学生信息---模糊查询 查询英语成绩是69,75,89的学生信息...,如果语文成绩相同,再按照英语成绩升序排序 查询姓李的学生的信息,按照英语成绩降序 分组统计查询 聚合函数的使用 sum() 获取所有学生英语成绩的总和 获取所有学生英语成绩和数学成绩的总和 获取姓李的学生英语成绩总和...by product; 统计每一类商品所花费的总金额 select product,sum(price) from orderitem group by product; 统计总金额花费在5000...group by product having sum(price)>5000; 按商品名称统计,统计总金额花费在5000以上的商品,并且按照总金额升序排序 select product,sum(price...: S(select)...F(from)...W(where)...G(group by)...H(having)...O(order by); 条件顺序不能颠倒,例如*where子句不能放在group

    3.7K20

    优化MyBatis查询条件:从Boolean类型判断到<choose>标签的进化

    boolean类型的true和false,后端Mapper层的代码可能会遇到需要构造类似if (param.existFlag) and table.id not in (xxxx1,xxxx2)这样的条件查询...那么我们需要再优化一下。 优化 在Java中,当判断条件变多时,可以使用switch语句、策略模式等方案优化,那么在MyBatis中可以使用进行优化。...MyBatis中的标签用于在多个条件中选择第一个满足条件的子句。...类似于Java中的switch语句,标签可以根据不同的条件选择执行不同的SQL子句,提高SQL语句的灵活性和可读性。...保持持续学习的态度,每天优化一点点,一点点改进,从而写出更加优雅、高效和安全的代码。 后续内容文章持续更新中… 近期发布。

    85710

    【Java 进阶篇】深入理解 SQL 分组查询

    在本文中,我们将深入探讨 SQL 中的分组查询,包括其基本语法、常用聚合函数、分组筛选条件、多重分组、分组排序等方面的内容。...基本语法 SQL 分组查询的基本语法如下所示: SELECT 列1, 列2, 聚合函数(列3) FROM 表名 GROUP BY 列1, 列2 HAVING 条件 让我们逐步解释每个部分的含义: SELECT...GROUP BY order_date; 在这个查询中,我们选择了 order_date 列作为分组的依据,然后使用 COUNT 函数计算每日的订单数量,使用 SUM 函数计算每日的订单总金额。...以下是一个示例查询,我们按照订单总金额降序排序客户的购买总金额: SELECT customer_id, SUM(total_amount) AS total_sum FROM orders GROUP...总结 SQL 分组查询是对数据库中的数据进行分组、汇总和分析的重要工具。通过合理使用分组查询,我们可以轻松地回答各种关于数据分布、统计信息、数据透视和筛选等问题。

    37020

    【数据库设计和SQL基础语法】--查询数据--聚合函数

    在数据统计和分析中具有广泛应用,通过不同的参数和条件组合,可以灵活地满足各种统计需求。 2.2 SUM 基本用法 SUM 函数用于计算查询结果集中某列的数值总和。...示例 计算订单总金额: SELECT SUM(total_amount) AS total_order_amount FROM orders; 计算销售额达到特定条件的产品总和: SELECT SUM(...注意事项 SUM 函数通常与 GROUP BY 子句结合使用,用于对不同组的数据进行总和计算。 结果是一个数值,表示满足条件的列值的总和。 SUM 函数是 SQL 中用于计算数值总和的重要聚合函数。...7.2 性能优化 索引优化 选择合适的列进行索引: 对于经常用于检索和过滤的列,考虑创建索引以提高查询性能。...优化查询 考虑查询优化: 如果 DISTINCT 是为了解决查询结果中的重复数据问题,可以考虑优化查询语句,确保关联条件和过滤条件的准确性。

    44410

    【数据库设计和SQL基础语法】--查询数据--聚合函数

    在数据统计和分析中具有广泛应用,通过不同的参数和条件组合,可以灵活地满足各种统计需求。 2.2 SUM 基本用法 SUM 函数用于计算查询结果集中某列的数值总和。...示例 计算订单总金额: SELECT SUM(total_amount) AS total_order_amount FROM orders; 计算销售额达到特定条件的产品总和: SELECT SUM(...注意事项 SUM 函数通常与 GROUP BY 子句结合使用,用于对不同组的数据进行总和计算。 结果是一个数值,表示满足条件的列值的总和。 SUM 函数是 SQL 中用于计算数值总和的重要聚合函数。...7.2 性能优化 索引优化 选择合适的列进行索引: 对于经常用于检索和过滤的列,考虑创建索引以提高查询性能。...优化查询 考虑查询优化: 如果 DISTINCT 是为了解决查询结果中的重复数据问题,可以考虑优化查询语句,确保关联条件和过滤条件的准确性。

    50110

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

    by & limit 一起协作 mysql分组中的坑 in多列查询的使用 分组查询 语法: SELECT column, group_function,......分组中,select后面只能有两种类型的列: 出现在group by后的列 或者使用聚合函数的列 聚合函数 函数名称 作用 max 查询指定列的最大值 min 查询指定列的最小值 count 统计查询结果的行数...sum 求和,返回指定列的总和 avg 求平均值,返回指定列数据的平均值 分组时,可以使用使用上面的聚合函数。...可以把having理解为两级查询,即含having的查询操作先获得不含having子句时的sql查询结果表,然后在这个结果表上使用having条件筛选出符合的记录,最后返回这些记录,因此,having后是可以跟聚合函数的...select 列 from 表名 where [查询条件] group by [分组表达式] having [分组过滤条件] order by [排序条件] limit [offset,] count

    8.5K31

    (5) 电商场景下的常见业务SQL处理

    建立索引,优化评论分页查询 根据我们索引规范可以考虑在where条件上建立索引 where条件有两个字段,我们可以通过以下语句计算一下两列数据在表中的区分度 计算字段数据区分度,建立索引 SELECT...,只查询出一条数据,就能返回我们需要的数据了,过滤程度是百分之百,我们完成了第一步优化 数据库的访问开销 = 索引 IO + 索引全部记录结果所对应的一个表数据的 IO 缺点 这种SQL语句查询的缺点是...,越往后翻页,比如几千页之后,效率会越来越差,查询时间也会越来越长,尤其表数据量大的时候更是如此 适用场景 它的适用场景是表的结果集很小,比如一万行以下时,或查询条件非常复杂,比如涉及到多个不同的查询判断...,但是效率要高于改写前的SQL 使用前提 使用这个SQL有一个前提是,商品评论表的主键是customer_id ,且是有覆盖索引(也就是刚刚我们建立的联合索引) 优化原理 先根据过滤条件利用覆盖索引取出主键的...BY customer_id ) b ON a.customer_id = b.customer_id 检验一下结果是否正确 总和是10010,说明查询结果正确

    70010

    这道 SQL 题,听说你有不一样的解法?

    题目: (1).前置条件: 有以下数据集C,表查询结果如下图所示,设置该表为表:test_month_amount。...(2).题目要求: 数据集C 中 Amount 字段是每个人同一月份,不同状态的金额总和,现要求使用 sql 实现对相同月份的数据均分Amount。 预期结果: 解题思路: (1)....子查询B: 按照NAME和MON进行分组求数量总和 查询结果如下: NAME MON cnt 张三 201901 3 李四 201902 2 王五 201902...使用子查询C left join 子查询 B 的结果,关联条件为: NAME, MON,使用 C.AMOUNT/B.cnt 即可求得平均值 查询结果如预期结果所示 解题方式一: 适用于不用创建物理表的情况下...,30000 AMOUNT union all select 7 ID,'王五' NAME,201902 MON,'F' STATE,30000 AMOUNT ) A group

    35430
    领券