マルチポリゴンをポリゴンに分割する必要がありますか?


8

私が実装しているシステムには、関連するジオメトリを持つテーブルT1があります。ほとんどのジオメトリは、10 <n <100のn個のポリゴンのセットです。現在、テーブルT1には、GiSTインデックスを持つMultiPolygonタイプのジオメトリ列があります。

テーブルT1が大きくなるので、Polygonタイプの列を持つ2番目のテーブルT2との1対多のリレーションを作成し、各MultiPolygonをいくつかのポリゴンに分割する方が良いと思います。

しかし、テーブルT1に検索を実装する必要があるため、2番目のアプローチの欠点は、処理する追加の結合があることです。さらに、テーブルT1の単一のレコードのジオメトリを挿入することはより複雑になります。

誰かがそのような問題の経験を持っているのか、その人が何か光を放つことができるのかと思っています。

回答:


1

T1テーブルのサイズを気にする必要はありません。インデックス(そしてもちろんトリガー)は、ほとんどの部分でパフォーマンスに影響を与えます。

結合が1つ少ないことに加えて、WKBから内部のPostGIS / GEOS表現への変換は、複数のポリゴンに対して個別に行うよりもわずかに最適だと思います。

個別のジオメトリテーブルが必要なのは、1つのポリゴンが複数のレコードに関連付けられている場合のみです。マルチポリゴンは、データベース設計の目的では単一のエンティティと見なす必要があります。関係がより複雑な場合にのみ、別のテーブルを考慮する必要があります。また、テーブル数が少なくなるため、物理的なスペースがわずかに節約されます。

両方の設定で試して、クエリの各部分のタイミングを提供するpgadminでクエリを実行します。


4
@MerseyViking。マルチポリゴンがポリゴンに分割されている場合、インデックスははるかに優れた働きをします。マルチポリゴンの場合、インデックスはマルチポリゴンの全範囲bboxに基づいて構築されます。インデックスのbboxが小さいほど、効果的なインデックスになります。
NicklasAvén、2011年

@Nicklasは、BBOXがマルチポリゴンで大きくなることに同意します。+1
Mapperz

わかりました。しかし、私が理解できないのは、インデックスが常にPolygonでより適切に機能する場合、MultiPolygonタイプをいつ使用するかです。
user3125 2011年

2
ポリゴンとマルチポリゴンの決定は、それよりも複雑です。考慮すべきことは他にもあります。マルチポリゴンは、「より良い」データベース設計を提供できます。ポリゴンとマルチポリゴンが空間的にどのように関連しているか、およびどのような処理を実行したいかによって、マルチポリゴンを分割することで得られる利益は大きくなることも、まったくなくなることもあります。マルチポリゴンも、処理の結果として一般的なジオメトリタイプです。たとえば、ポリゴンと交差道路でST_Differenceを使用すると、マルチポリゴンが返されます。
NicklasAvén、2011年

1
@MerseyViking、私はあなたの要点を理解していますが、彼は各マルチポリゴンに10から100のポリゴンを持っているので、それらをポリゴンに分割することは大きなブーストを与える大きなチャンスがあります。また、インデックス付き整数フィールドの結合はそれほどコストがかかりません。
NicklasAvén、2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.