微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL按年,月,周,日,小时分组SQL与程序性能

如何解决SQL按年,月,周,日,小时分组SQL与程序性能

与任何与绩效相关的

为第二种方法检查查询计划将提前告诉您任何明显的问题(当您不需要时进行全表扫描),但是没有替代方法。在sql性能测试中,应该使用适当大小的测试数据来进行测量。

由于这是一个复杂的情况,因此您不仅要简单地比较两种不同的方法来执行单个查询,还要将单个查询方法一个迭代方法进行比较,因此环境的各个方面可能在实际性能中起主要作用。

具体来说

  1. 一个查询方法相比,您的应用程序与数据库间的“距离”,因为每次调用的等待时间都将浪费时间
  2. 是否使用准备好的语句(在每个查询上对数据库引擎进行额外的解析工作)
  3. 范围查询本身的构造是否昂贵(受2的影响很大)

解决方法

我需要编写一个查询,该查询将按年到小时的时间段对大量记录进行分组。

我最初的方法是按照程序在C#中确定时间段,遍历每个时间段并运行SQL以获取该时间段的数据,并随即建立数据集。

SELECT Sum(someValues)
FROM table1
WHERE deliveryDate BETWEEN @fromDate AND @ toDate

随后,我发现可以使用Year(),Month()Day()和datepart(星期,日期)和datepart(hh,日期)对记录进行分组。

SELECT Sum(someValues)
FROM table1
GROUP BY Year(deliveryDate),Month(deliveryDate),Day(deliveryDate)

我担心的是,由于不能有效地使用datetime字段上的索引,在group
by中使用datepart会导致性能比在指定的时间段内多次运行查询更糟糕;关于这是否属实有何想法?

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。