インデックスは実際の行にのみインデックスを付けることができ、集約された行にはインデックスを付けることができません。したがって、はい、目的のインデックスに関する限り、前述のような一意の値を持つテーブルを作成することが唯一のオプションです。 data.day
からの外部キー制約を使用して参照整合性を適用します days.day
へ 。これはかもしれない 完全な状況によっては、パフォーマンスにも最適です。
ただし、これはパフォーマンスに関するものなので 、別の解決策があります。再帰CTEを使用してルーズインデックススキャンをエミュレートできます:
WITH RECURSIVE cte AS (
( -- parentheses required
SELECT day FROM data ORDER BY 1 LIMIT 1
)
UNION ALL
SELECT (SELECT day FROM data WHERE day > c.day ORDER BY 1 LIMIT 1)
FROM cte c
WHERE c.day IS NOT NULL -- exit condition
)
SELECT day FROM cte;
最初のSELECT
をかっこで囲みます ORDER BY
が添付されているため必要です およびLIMIT
条項。参照:
これには、day
のプレーンインデックスのみが必要です 。
実際のクエリに応じて、さまざまなバリエーションがあります:
あなたのフォローアップ質問に対する私の答えの詳細: