インデックスは実際の行にのみインデックスを付けることができ、集約された行にはインデックスを付けることができません。したがって、はい、目的のインデックスに関する限り、前述のような一意の値を持つテーブルを作成することが唯一のオプションです。 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のプレーンインデックスのみが必要です 。
実際のクエリに応じて、さまざまなバリエーションがあります:
あなたのフォローアップ質問に対する私の答えの詳細: