次のことを行うかどうかはわかりません:
- 挿入しようとしている行が既存の行の一部と重複していないかどうかを確認します。または
- 既存のすべての行を検索して、重複する行を特定しますか?
(1)の場合、基本的にすでに行っていること...
SELECT *
FROM YOUR_TABLE
WHERE :inputEnd > beginRange AND :inputStart < endRange;
...コンポーネントが反対にある複合インデックスがある場合は、オーバーラップが発生し、非常にパフォーマンスが高いはずです。 道順:{beginRange ASC, endRange DESC}
。
(2)の場合、次のようなウィンドウ処理を利用できます。
SELECT *
FROM (
SELECT
YOUR_TABLE.*,
LEAD(beginRange) OVER (ORDER BY beginRange) nextBeginRange
FROM YOUR_TABLE
)
WHERE endRange > nextBeginRange;
これにより、次の範囲と重複するすべての範囲が得られます(「次の」の意味は、beginRange
のコンテキストで定義されます)。 注文)。
厳密には、これには複合インデックスも必要ありません(カバー
)-{beginRange}
の単純なインデックス まともなパフォーマンスを確保する必要があります。