|
|
1
9
与任何与性能相关的事情一样 测量 检查第二种方法的查询计划会提前告诉你任何明显的问题(当你知道不需要全表扫描时,可以进行全表扫描),但测量是无可替代的。在SQL性能测试中,应该使用适当大小的测试数据进行测量。 由于这是一个复杂的情况,您不仅仅是比较两种不同的方法来执行单个查询,而是将单个查询方法与迭代方法进行比较,您的环境的各个方面可能会在实际性能中发挥重要作用。 明确地
|
|
|
2
6
如果你把一个公式放在比较的字段部分, 你会得到一个表格扫描 . 索引在字段上,而不是在datepart(字段)上, 因此,必须计算所有字段 -所以我认为你的预感是对的。 |
|
|
3
5
你可以做类似的事情:
|
|
|
4
5
如果你能容忍再加入一张桌子对性能的影响,我有一个建议,看起来很奇怪,但效果很好。 创建一个我称之为ALMANAC的表,其中包含周、月、年等列。您甚至可以为日期的公司特定功能添加列,例如该日期是否为公司假期。您可能希望添加一个开始和结束时间戳,如下所述。 虽然你可能每天只坐一排,但当我这样做的时候,我发现每班坐一排很方便,因为一天有三班。即使按照这个速度,十年的时间也只有一万多行。 当您编写SQL来填充此表时,您可以使用所有面向日期的内置函数来简化工作。当你进行查询时,你可以使用日期列作为连接条件,或者你可能需要两个时间戳来提供一个范围,以便在该范围内捕获时间戳。其余部分与处理任何其他类型的数据一样简单。 |
|
|
5
2
我正在为报告目的寻找类似的解决方案,偶然发现了这篇名为 Group by Month (and other time periods) 。它显示了按日期时间字段分组的各种方法,有好有坏。绝对值得一看。 |
|
|
6
1
我认为你应该对它进行基准测试以获得可靠的结果,但是,依我之见,我的第一个想法是让数据库来处理它(你的第二种方法)会比在客户端代码中处理它快得多。 使用第一种方法,您需要多次往返DB,我认为这将要贵得多。 :) |
|
|
7
1
您可能想考虑一种维度方法(这与Walter Mitty的建议类似),其中每一行都有一个日期和/或时间维度的外键。这允许通过与此表的连接进行非常灵活的求和,其中这些部分是预先计算的。在这些情况下,密钥通常是YYYYMMDD和HHMMSS形式的自然整数密钥,其性能相对较高,也是人类可读的。 另一种选择可能是索引视图,其中每个日期部分都有单独的表达式。 或计算列。 但必须测试性能并检查执行计划。.. |
|
Sweepy Dodo · JSON lite的格式化 1 年前 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
Zegarek · Postgresql递归查询未提供预期结果 1 年前 |
|
|
Joe · 为什么这两个查询之间的性能存在如此大的差异? 2 年前 |
|
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 2 年前 |