【发布时间】:2013-04-17 20:11:06
【问题描述】:
我正在创建一个在线日历应用程序(如 Google 日历或 MS Outlook),并且不知道应该如何存储数据以便快速查询基本视图:每日、每周, 每月一次。
在将其标记为重复之前,请记住我已经阅读了这里的多个主题,并且在大多数情况下,它们会说“太难为一般目的而优化”。就我而言,这是一个非常具体的目的,我还没有看到有人问过这个问题——一种非常具体的数据类型,许多开发人员[希望]都有过使用经验。
我需要快速获取位于我的视图中的任何行(日、周、月),例如:
[end date of row] >= [start date of query]
AND
[start date of row] <= [end date of query]
我没有看到一个正常的 b-tree 索引可以很好地解决这个问题,但我也怀疑有人想出了一些可以与 SQL Server 2005(可能更早版本)一起使用的聪明方法,因为日历应用程序一直存在,并且有 100 多个。
我也对重复发生的事件以及如何存储这些事件感到好奇,尽管我目前的计划是始终读取所有这些事件(按“Is Recurring”索引)并在代码中优化,而不是 SQL。这些事件的数量不应该太多,不像正常事件会随着时间的推移变得非常大。
更新:这个问题也是独一无二的,因为它是针对日历应用程序的,我需要存储带有时区信息的日期,但我的查询不能是特定于时区的。如果您有使用日历应用程序的经验,您就会明白我的意思(如果没有,您只会说存储为 UTC)。
【问题讨论】:
-
感谢马克的编辑。我仍然无法克服特定于 Microsoft 的“SQL Server”,但我想这是行业标准,所以我会尽量记住从现在开始删除 MS/Microsoft 部分。
标签: sql-server sql-server-2005 calendar indexing