【问题标题】:storing non gregorian datetimes in database for performance在数据库中存储非公历日期时间以提高性能
【发布时间】:2015-04-12 16:43:18
【问题描述】:

我想在我的数据库中存储非公历 datetime 值(postgresqlsql server) 我有两种方法可以做到这一点。

1- 将标准datetime 存储在数据库中,然后在我的应用程序中将其转换为我的漂亮日期系统。

2- 将 datetime 存储为 varchar 在两个不同的字段(日期字段和时间字段)中,以 YYYY-MM-DDHH:MM:SS 格式在视觉日期系统中

在表中可能存在数千或数百万行并且有时我需要对行进行排序时,哪种方式更有助于提高性能。

【问题讨论】:

  • 您所说的“非公历”是什么意思,这与将日期与时间分开有何关系?
  • @IMSoP 日期,如波斯 (jalali) 日期
  • 查看此以了解公历:en.wikipedia.org/wiki/Gregorian_calendar
  • 请注意您的性能问题,但在 SQL Server 的更高版本中,您可以使用 datetime2 以及所需的精度。精度小于 3 只需要 6 个字节。
  • @DanGuzman 我担心的是 postgresql,因为我经常使用它。

标签: sql-server database postgresql datetime


【解决方案1】:

将日期存储为字符串通常会非常低效,无论是在存储中还是在处理中。在 Postgres 中,您可以定义自己的类型,并重载现有的日期函数和运算符,但这可能需要大量工作(除非您发现有人已经这样做了)。

快速搜索出现了this old mailing list thread,其中一个建议是围绕现有日期类型构建输入和输出函数。这可以让你利用一些现有的功能(例如,我猜'1天'和'1年'之类的间隔具有相同的含义;如果不是,请原谅我的无知)。

另一种选择是使用整数或浮点数进行存储,例如Unix 时间戳是自固定时间以来的秒数,因此没有关于日历的内置假设。然而,与字符串表示不同的是,它可以有效地存储和索引,并且定义了有用的操作,例如排序和加法。在内部,所有日期都将使用这种方法的一些变体进行存储;自定义类型只会更方便地隐藏这些细节。

【讨论】:

    猜你喜欢
    • 2013-02-07
    • 2021-09-27
    • 2017-05-31
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2013-12-27
    相关资源
    最近更新 更多