sql - 使用整数值的日期算术

标签 sql postgresql query-optimization

问题

字符串连接会减慢查询速度:

date(extract(YEAR FROM m.taken)||'-1-1') d1,
date(extract(YEAR FROM m.taken)||'-1-31') d2

这是在代码中作为字符串的一部分实现的,如下所示(其中 p_ 变量是整数,由最终用户作为输入提供):

date(extract(YEAR FROM m.taken)||''-'||p_month1||'-'||p_day1||''') d1,
date(extract(YEAR FROM m.taken)||''-'||p_month2||'-'||p_day2||''') d2

这部分查询在包含日期的情况下运行 3.2 秒,不包含日期的情况下运行 1.5 秒,这让我相信还有很大的改进空间。

查询的总运行时间不到 10 秒;我希望将整个查询时间缩短到大约 2 或 3 秒。硬件升级已经发生。 ;-)

版本

PostgreSQL 8.4.4。

问题

创建日期的更好方法是什么(大概没有串联)?

更新

这看起来很有希望:PGTYPESdate_mdyjul

非常感谢!

最佳答案

遗憾的是,我认为没有其他方法可以在没有文本连接的情况下构建日期。

是的,坦率地说,我不喜欢 Postgresql 这里的方法。似乎大多数日期操作必须通过以下方式完成:将日期字段提取为整数,将它们转换为文本,将它们附加到更多文本以创建日期的文本表示,然后告诉 postgres 将该文本解析为日期...这味道对我来说不好,我本能地认为通过解析字符串构建日期应该只从文本输入完成。但是,我认为,postgresql 将数据类型处理与其文本表示联系得太紧密了。因此,例如,如果我想从三个整数值(D,M,Y)构建一个日期,我必须(如果我没记错的话)构建一个字符串并让 PG 解析它。我觉得这样做很不干净......

撇开咆哮不谈,我怀疑这会大大降低你的性能。

关于sql - 使用整数值的日期算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3019543/

相关文章:

mysql - 将多个表中的值相乘 MySQL

sql - PostgreSQL - 将数值从 jsonb 字段复制到整数列

postgresql - postgresql嵌套异常可能吗?

mysql - 快速全文搜索在 MySQL 中按 id 排序的精确短语一次出现

sql - MySQL - 根据键/值表中的 2 个键连接表

sql - "Lost"SQL服务器数据库

php - 如何在 php 和 mysql 中执行更新命令后检索列

php - 直接在 PHP 中访问 psql-array

sql - 如何计算postgresql中的空值?

SQL ROW_NUMBER() 性能问题