2017-08-11 10 views
0

私は800kポイントの経度と緯度を含むテーブルXを持っています。 XのSDO_GEOMETRY列は、点のジオメトリ・タイプとして点の座標を格納するYです。Oracle Spatialの機能が遅い

私は特定の(経度、緯度)から1000メートル以内にある800kポイントのうち何個をチェックするかを確認するクエリを実行しました(aa.bbbbbb、cc.ddddddで指定されています) SQL Plusで次のように)座標:
SELECT * FROM X x WHERE sdo_geom.sdo_distance(SDO_GEOMETRY(2001,8307, SDO_POINT_TYPE(aa.bbbbbb,cc.dddddd,NULL),NULL,NULL),x.Y,0.5) < 1000

私の疑問は、クエリのパフォーマンスの低下に関してれます。撮影に要した時間は約8分であり、もっと早く実行したいと考えています。なぜそんなことが起こっているのですか?クエリをより高速に実行する方法はありますか?または私は何か間違っているのですか?助けてください。ありがとうございました。

答えて

0

この種の問合せを行う適切な方法は、空間索引を使用するSDO_WITHIN_DISTANCE()演算子を使用することです。書かれているように、テーブル内の800000ポイントと比較ポイントの間の距離を計算しています。

SELECT * 
FROM X x 
WHERE sdo_within_distance(
    x.Y, 
    SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(aa.bbbbbb,cc.dddddd,NULL),NULL,NULL), 
    'distance=1000 unit=m' 
) = 'TRUE'; 
関連する問題