オンライン カレンダー アプリ (Google カレンダーや MS Outlook など)を作成していますが、基本的なビュー (日単位、週単位、月単位) をすばやくクエリできるようにデータを保存する方法がわかりません。
これを重複としてマークする前に、ここでいくつかのスレッドを読んだことを覚えておいてください。ほとんどの場合、「一般的な目的のために最適化するのは難しい」と言われています。私の場合、これはまだ質問されていない非常に具体的な目的であり、多くの開発者が [願わくば] 経験したことがある非常に具体的なタイプのデータです。
ビュー (日、週、月) 内にある行をすばやく取得する必要があるため、次のようになります。
[end date of row] >= [start date of query]
AND
[start date of row] <= [end date of query]
通常の b ツリー インデックスがこれに対してうまく機能しているとは思えませんが、誰かが SQL Server 2005 (およびおそらくそれよりも古いバージョン) で動作する巧妙なものを考え出したのではないかと思います。それらの数百。
また、繰り返し発生するイベント、それらを保存する方法にも興味がありますが、現在の計画では、常にそれらすべてを読み取り (「Is Recurring」によるインデックス)、SQL ではなくコードで最適化することです。時間の経過とともに非常に大きくなる可能性がある通常のイベントとは異なり、それらの数は膨大であってはなりません。
更新:これもこの質問に固有のものです。これはカレンダー アプリ用であるため、日付をタイムゾーン情報と共に保存する必要がありますが、クエリをタイムゾーン固有にすることはできません。カレンダー アプリを使用した経験がある場合は、私の言いたいことがわかるでしょう (そうでない場合は、ストアを UTC と言うだけです)。