0
したがって、私は船舶座標 "ship"という空間データベースを持っています。 これは、次の表があります。指定された時間間隔で、指定された距離内にあるジオメトリポイントを確認する方法が必要です
SHIPS
============
id (serial)
vessel(uuid)
time(timestamp without timezone)
coord(geometry(Point, 4326)
私はYの時間間隔で、その座標が遠いXメートルある血管を返すクエリを記述する必要があります。これまでのところ、私はこれがあります。
SELECT DISTINCT ON (a.vessel, b.vessel) a.vessel, b.vessel
FROM ships a
INNER JOIN ships b
ON a.vessel = b.vessel
WHERE
ST_DWithin((ST_Transform(a.coord, 3035)),(ST_Transform(b.coord, 3035)), 5000)
AND (EXTRACT (EPOCH FROM(a.time - b.time))) <= 1500
AND (a.vessel != b.vessel);
を私はa.vessel = b.vessel制約を離れて、私はそれを削除した場合の結果は、両方の列に同じ容器であれば、それは常にnullを返します!。
おかげでたくさんの伴侶を。 500.000行で過去30分間のクエリを実行していて、まだ終了していません。それは普通ですか? –
'ships(ST_Transform(coord、3035))'に空間インデックスがありますか? – redneb
私はしませんでした。 私はちょうど "CREATE INDEX coord_gix ON GIST(coord);を使用して出荷しました;" 1つを作成して再度クエリを実行します。それは正しい方法ですか? –