約100万行のこのようなデータベーステーブルがあります:
id prev curr next
1 25 26 27
2 26 27 28
3 27 45 46
4 45 46 47
5 46 47 48
6 47 59 41
..............
..............
Java 側では、(curr = 45 および diff = 2) のような特定の入力に対して、45、27、26 などの項目のリストを取得する必要があります。入力 (curr = 59 および diff) の場合= 1), I need to get 59, 47 上記のように、prev と next は常に curr 値より 1 小さく、1 大きいとは限りません。
現在、私が Java で行っていることは diff 値に基づいています。テーブルにクエリを実行して、curr の前の値を取得します。次に、prev を curr として使用して、再度テーブルにクエリを実行し、探しているものが得られるまで続行します。しかし、20 や 30 などのより高い diff 値の場合、これは DB 呼び出しが多すぎます。
このすべてを 1 つの DB クエリで実行することについて考えている人はいますか? テーブル内の行が多すぎるため、データをローカルにフェッチして保持することはできません。
コメントへの回答で編集:
- テーブルには他の列も含まれているため、データは 16MB だけではありません。関係のない列を切り取っただけです。
- curr フィールドに重複はありません。
- prev および curr と同様に、curr および next 列を使用する関数は他にもあります。
- これはツリー構造ではありません。したがって、最後の行は有効な行です。