-
mysql百万级数据待优化(group by,sum)5
需求:
由于数据量极大,现在表的设计已经是一个月一个表。目前有二千多个设备,每小时上传一次数据。一个月就有2000*24小时*30=144万条。
表设计如下:
Rain201412
ObserveTime bigint
StationID varchar
Rain float
ObserveTime和StationID做了联合主键和索引
由于是灵活统计任意时段内的3小时,6小时,12小时,24小时的降水。每个正点时次设备因故障经常需要人工订正数据。
现在我统计2014年12月13日11时各设备的过去12小时降水
select sum(Rain) from Rain201412 where ObserveTime in(201412130000,201412130100,201412130200,201412130300,201412130400,201412130500,201412130600,201412130700,201412130800,201412130900,201412131000,201412131100) group by StationID order by null
这段sql要运行3秒是什么问题?2015年1月13日 10:52
9个答案 按时间排序 按投票排序
-
那个in可以去掉,可以在后面用and进行拼接 然后group by你看能用什么办法代替掉不
如果用其他写法代替之后还是不行,建议给列添加索引
另外,函数尽量少用,我上次用substring在sql里面写的时候只要0.2秒,但是部署到虚拟机上要跑1分钟2016年3月24日 20:44
-
如果是固定的几个数据,in的效率和exists效率一样
如果in和exists后面用到了子查询,子查询的数据量比较大,exists比in高,数据量小,in效率比exists高2015年1月28日 11:06
-
使用 exists试试看
我记得 exists 在一定条件下的效率要高上不少
刚刚找了找参考资料:
[url=http://blog.sina.com.cn/s/blog_63a48d250100sni4.html]in and exists效率问题
[/url]2015年1月23日 14:52
-
select sum(Rain) from Rain201412 where ObserveTime like '20141213%'group by StationID order by null
如果需要进一步限制可以加上 and ObserveTime in(201412130000,201412130100,201412130200,201412130300,201412130400,201412130500,201412130600,201412130700,201412130800,201412130900,201412131000,201412131100)
另,其实可考虑删除目前的索引,创建三个的联合索引ObserveTime,StationID,Rain
你可以测试一下2015年1月13日 21:27
-
最好查询计划贴出来。
另外,联合索引做的顺序是什么?
先ObserveTime然后StationID吗?
这样的话,直接用StationID去分组是用不到索引的。
试试看分2个索引建立。2015年1月13日 18:27
-
可以确认3个地方
1. oerder by "null" ?? 如果没有排序最好去掉,如果有排序,确认排序字段是否有索引
2. 如果可能,把in的方式改为 ObserveTime = xx and ObserveTime = yy ...
3. 适当的索引2015年1月13日 18:20
相关推荐
MySQL 数据库中 group by 语句与 update 语句的用法研究 本论文对 MySQL 数据库中的 group by 语句和 update 语句进行了深入研究,讨论了这些语句在数据库查询和修改中的应用,并给出了具体的解决方案。 一、MySQL...
MySQL中的GROUP BY语句用于对数据进行分组并计算每个组的聚合函数,如COUNT(), SUM(), AVG(), MAX(), MIN()等。在处理大数据量时,优化GROUP BY语句至关重要,因为它直接影响到查询性能。本篇文章将深入探讨MySQL...
mysql 中order by 与group by的顺序是:selectfromwheregroup byorder by注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group ...
MySQL中的GROUP BY语句用于对数据进行分组和聚合,通常与聚合函数(如COUNT、SUM、AVG等)一起使用。在处理大数据量时,优化GROUP BY操作至关重要,因为这直接影响查询性能。MySQL提供了几种优化策略,其中两种是...
5. **练习查询**:生成的虚拟数据可以用于练习复杂的SQL查询,例如多表联接(JOIN)、子查询、聚合函数(COUNT, SUM, AVG, MAX, MIN)以及排序和分组(ORDER BY, GROUP BY)。 6. **索引概念**:学习如何为表的特定...
MySQL中的`GROUP BY`语句是用于对数据库中的数据进行分组,以便可以对每个分组执行聚合操作,如计算总和、平均值、最大值、最小值等。这个功能在数据分析和报表生成中非常常见,因为它允许我们按特定字段对数据进行...
在SQL中,`GROUP BY`语句用于对数据进行分组,通常与聚合函数(如`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`等)结合使用,以便对一组具有相同值的记录进行统计计算。然而,MySQL和其他数据库系统在处理`GROUP BY`时有...
在数据库管理中,了解MySQL数据量的大小是至关重要的,这有助于优化性能、规划存储空间以及进行容量规划。本文将详细讲解如何统计MySQL数据库的数据量大小,并涉及CONCAT函数的解读,以及对information_schema和...
- 分组与聚合函数:GROUP BY、HAVING和聚合函数(如COUNT, SUM, AVG, MAX, MIN)用于统计和分析数据。 2. **存储过程与函数**: - 存储过程:预编译的SQL语句集合,可以提高执行效率,减少网络传输。 - 用户定义...
MySQL中的`GROUP BY`语句是用于对数据进行分组,以便可以对每个分组执行聚合函数,如`SUM`, `COUNT`, `AVG`, `MAX`, `MIN`等。当你需要统计每个分组内的一些特定信息时,`GROUP BY`就显得非常有用。 在描述中提到,...
`GROUP BY`用于对数据进行分组,允许你对每个分组应用聚合函数,如`COUNT()`, `SUM()`, `AVG()`, `MAX()`或`MIN()`。查询的`SELECT`部分应该只包含分组列或者这些聚合函数。如果你需要选择非聚合列,这些列必须在`...
配合`GROUP BY`语句,可以按特定列对数据进行分组。 9. **索引**:了解数据表是否以及如何被索引也很关键,因为索引可以显著提高查询性能。你可以使用`SHOW INDEX FROM table_name;`来查看表的索引信息。 这些基本...
在上面的示例中,我们使用了 SUM 函数来计算每个 userid 对应的每个 subject 的分数,并使用 GROUP BY 语句来分组。 MySQL 列转行是将一列数据转换为多行数据的操作。例如,我们可以使用 UNION ALL 语句来将每个 ...
MySQL在使用HAVING子句时规定,HAVING必须配合GROUP BY子句使用,因此在没有GROUP BY子句的情况下使用HAVING子句是不符合SQL标准的。但MySQL为了灵活处理某些特殊场景,会自动将没有GROUP BY子句的SQL语句重写,增加...
mysql 中类似php switch case 的语句。 select xx字段, case 字段 when 条件1 then 值1 when 条件2 then 值2 ...group by isCheck 使用case when : select sum(redpackmoney) as stota, (CASE i
SQL中的`GROUP BY`语句是数据库查询中的一个重要部分,它用于将数据按照一个或多个列的值进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`和`MAX`等。下面我们将详细讨论`GROUP BY`的使用方法及其相关...
在MySQL数据库中,`ORDER BY` 和 `GROUP BY` 是两个非常重要的子句,它们各自在数据处理中扮演着不同的角色。理解它们的区别对于优化查询性能和获取所需数据至关重要。 `ORDER BY` 子句主要用于对查询结果进行排序...
在MySQL数据库中,ORDER BY、GROUP BY 和 HAVING 子句是SQL查询中用于数据处理的关键组成部分,它们各自承担不同的任务,以帮助我们从数据库中提取有用的信息。 ORDER BY 子句主要用于对查询结果集进行排序。当你...