0

ユーザーとトランザクションの 2 つのテーブルがあります。どちらのテーブルでも、行にはタイムスタンプがあります。

複雑なクエリを実行すると、パフォーマンスの問題が発生します。トランザクションの日付は、ユーザー エクスペリエンスのどの時点で発生したかを反映するように正規化されます (つまり、ユーザーが参加してから何日後にトランザクションが処理されたか)。

この「正規化された日」メジャーは、次のように計算されます。

ceil(extract(days from T.tdate - U.created_at)) +1

クエリの速度を上げることができるように、これにインデックスを付ける方法はありますか?

4

2 に答える 2

2

いいえ: PostgreSQL は現在、複数のテーブルを参照するインデックスの作成を許可していません。

または、次のこともできます。

  • トリガーを使用して、両方のテーブルへの挿入/更新のタイムスタンプの違いを計算するという maniek の提案に従ってください。
  • Postgresql 9.3 のCREATE MATERIALIZED VIEWを使用すると、ビューの結果セットのスナップショットを取得してテーブルとして保存するビューを定義できます。このスナップショットの後にソース テーブルに加えられた変更は、自動的には含まれないことに注意してください。更新されたスナップショットのレポートを生成する直前に、REFRESH MATERIALIZED VIEWを使用してこのビューを更新できます。
于 2013-08-26T21:41:46.470 に答える
2

そのようなインデックスを直接作成する方法はありません。

数式の値を格納する別のフィールドを T テーブルに追加し、そのフィールドにインデックスを追加できます。トリガーを使用して、そのフィールドの値を維持できます。

于 2013-08-26T21:36:41.770 に答える