3

アプリのユーザーが検索できるようにする必要がある場所のテーブルがあります。基本的に「自分から x マイル以内の場所」

私は次のようなクエリを使用しています:

select * from job_locations 
   where earth_box(ll_to_earth(51.5, -0.085), 5000) @> ll_to_earth(latitude, longitude)  
   and earth_distance(ll_to_earth(51.5, -0.085), ll_to_earth(latitude, longitude)) < 5000;

そして、このようなインデックス:

CREATE INDEX job_locations_lat_lng on job_locations USING gist(ll_to_earth(latitude, longitude));

ただし、これはマルチテナント システムであり、すべてのテーブルに「tenant_id」フィールドがあり、常にそれによってフィルタリングします。したがって、理想的には、インデックスに tenant_id と ll_to_earth(lat, lng) の両方を含めることができます。これにより、おそらく検索がはるかに高速になるはずです。

これは可能ですか?そのインデックスを作成するにはどうすればよいですか?

ありがとう!
ダニエル

4

1 に答える 1

6

少なくとも Postgres 8.4 から存在していたように見える tenant_id フィールドを含むインデックスを作成するには、おそらくbtree_gis t 拡張機能が必要です。

CREATE EXTENSION btree_gist;
CREATE INDEX job_locations_lat_lng ON job_locations USING gist(tenant_id, ll_to_earth(latitude, longitude));
于 2013-08-05T14:16:46.057 に答える