3

地理データを保存するための非常に大きなSQLiteデータベースがあります。GIS拡張機能を使用できません。また、他のデータベースでもすべてを使用できるようにしたいと思います。

私のテーブル構造は次のとおりです。

tbl(float fromLon, float fromLat, float toLon, float toLat, binary binaryData)

データベース(何かのポリゴン)内にいくつかのバイナリデータを格納し、そのバウンディングボックスをfromLon、fromLat-> toLon、toLatの形式で格納します。

次に、「この領域(reqLlon1、reqLat1)-(reqLon2、reqLat2)内にあるすべてのbinaryData(ポリゴン)を教えてください」のようなクエリがあります。サンプルクエリは次のようになります。

SELECT binaryData
FROM tbl WHERE
(reqLon1 < toLon) AND
(reqLat1 < toLat) AND
(reqLon2 > fromLon) AND
(reqLat2 > fromLat) 

問題は、物事をスピードアップするための適切なインデックスを見つけられないようです..のような単純なインデックス

idx1(fromLon,fromLat,toLon,toLat)

うまくいきません。MySQLで同じことを試しました(同じレイアウト、同じインデックス)、それはインデックスの長さの半分しか使用しないと述べています(select ..を説明してください)。

誰かが私にインデックスがうまくいくように見えるべきであるというヒントを与えることができますか?またはそれは不可能である可能性がありますか?

4

1 に答える 1

1

R*Tree モジュールの使用を検討する必要があります。

R ツリーは、範囲クエリを実行するために設計された特別なインデックスです。R ツリーは、各エントリが X 座標と Y 座標の最小値と最大値を持つ四角形である地理空間システムで最も一般的に使用されます。クエリ四角形が与えられると、R ツリーは、クエリ四角形内に含まれる、またはクエリ四角形に重なるすべてのエントリをすばやく見つけることができます。このアイデアは、CAD システムで使用するために 3 次元に簡単に拡張できます。R ツリーは、時間領域の範囲検索にも使用されます。

于 2012-06-10T17:02:38.980 に答える