次のようなテーブルがあります。
ID StartRange EndRange
----------------------------
1 1 3
2 4 8
3 9 12
などなど、500 万件を超えるレコードが存在します。最後のレコードは次のようになります。
ID StartRange EndRange
---------------------------------
5235976 9894727374 9894727378
つまり、各レコードでStartRange
andが重複することはありません。EndRange
範囲に一致する数値の対応する ID を見つけるクエリを実行する必要があります。
SELECT ID FROM BigTable WHERE '5000000' BETWEEN StartRange AND EndRange;
残念ながら、このクエリは完了するまでに数秒かかります。実行時間が最小限になるように最適化する必要があります。少し調査したところ、インデックスを追加しても役に立たないようです。数値が正確にStartRange
またはEndRange
値である場合にのみ適用され、その間にある場合は適用されないためです。
実行時間を短縮するために使用できるヒントやコツはありますか? できれば1秒以内が理想です。