2
効率的な範囲集計クエリのためのデータベース?
簡単な例として、次のようなテーブルがあるとします。 seq | value ----+------ 102 | 11954 211 | 43292 278 | 19222 499 | 3843 テーブルには数億のレコードが含まれる可能性があり、次のようなクエリを頻繁に実行する必要があります。 SELECT sum(value) WHERE seq > $a and seq < $b seqインデックスが作成されている場合でも、一般的なデータベース実装は各行をループして、最良の場合の合計を計算します。O(n)ここnで、は範囲のサイズです。 O(log(n))クエリごとに、これを効率的に実行できるデータベースはありますか? ここで説明するように、セグメントツリーと呼ばれるデータ構造に遭遇しました。範囲ツリーまたは間隔ツリーとも呼ばれますが、これらの名前はすべて、データ構造のわずかに異なるバリエーションとして説明されることがよくあります。 しかし、そのようなデータ構造を実装するデータベースに出くわしたことはありません。インメモリ構造の場合、最初から実装するのは簡単ですが、永続化する必要がある場合や、メモリに収まりきらない場合は注意が必要です。これを既存のデータベースの上に実装するための効率的なパターンがある場合、それも役立ちます。 補足:これは追加専用のテーブルではないため、この場合、累積合計を保持するなどの解決策は機能しません。