1

私はスタートとストップで位置のデータベースを作ろうとしています:基本的には1D軸上の線です。特定の間隔で重複するすべての位置を効率的にクエリしたいと考えています。従来のテーブルでは、クエリに 2 つの不等式が必要になるため、インデックスを作成できません。R ツリー インデックスも使用できますが、多次元範囲クエリ用に設計されているようです。軸に線を格納するより効率的な方法はありますか?

興味のある方は、データベースにゲノム間隔を保存することをお勧めします。テーブルの例を次に示します。

CREATE TABLE lines (id INTEGER PRIMARY KEY, start INTEGER, stop INTEGER);

これを行う基本的な方法は次のとおりです。

SELECT * FROM lines WHERE start <= <end of interval> AND stop >= <start of interval>;

繰り返しますが、これは非常に遅く、インデックスを作成できません。R ツリーは次のように機能します。

CREATE VIRTUAL TABLE lines_index USING RTREE (id, start, stop);
SELECT * from lines_index WHERE start <= <end of interval> AND stop >= <start of interval>;

R ツリーは私たちの実装には理想的ではないので、代替手段があるかどうか疑問に思っています...

4

1 に答える 1

0

まず、完全にインデックスを作成することはできませんが、開始間隔だけでインデックスを作成できます。間隔の90%にstart = stopがある場合、それは大きな改善になるはずです。唯一の速度低下は、非常に長い間隔で発生します。

于 2011-02-07T19:21:19.930 に答える