2012-05-21 29 views
1

我有主要索引問題。 我有'geog'(geography,multipolygon)列的表'國家'。 我也有這個專欄的要點。 這與ST_CoveredBy()針對與2行表(每個「的GeOG」約5MB)簡單的查詢需要13秒(查詢結果是正確的):postgis中的空間主題索引 - 性能

select c."ID" from gis.country c where ST_CoveredBy(ST_GeogFromText('SRID=4326;POINT(8.4375 58.5791015625)'), c."geog") =true 

當我DROP掉索引,查詢也採取了13S 。

我已經做了:

編輯

查詢計劃 -

Index Scan using sindx_country_geography_col1 on country c (cost=0.00..8.52 rows=1 width=4) 
    Index Cond: ('0101000020E61000000000000000E0204000000000204A4D40'::geography && "geog") 
    Filter: _st_covers("geog", '0101000020E61000000000000000E0204000000000204A4D40'::geography) 
+1

請發佈查詢計劃。該索引很難用於具有「2」行的表格。使用sindx_country_geography_col1上國家C – Quassnoi

+0

索引掃描(成本= 0.00..8.52行= 1米寬度= 4) 指數電導率:( '0101000020E61000000000000000E0204000000000204A4D40' ::地理&& 「的GeOG」) 過濾器:_st_covers( 「的GeOG」, '0101000020E61000000000000000E0204000000000204A4D40' :: geography) –

+0

查詢確實使用索引。 – Quassnoi

回答

2

,你不會看到一個索引查詢的任何利益對一個表只有兩行。如果您有數百或更多的行進行查詢,索引的優勢纔會更明顯。

我猜測你有兩個非常詳細的國家多面體。有策略將它們分成網格以提高性能。如何將您的國家分解爲網格應該基於(1)您感興趣的領域(您最可能查詢的地方)的密度,以及(2)多邊形複雜性或頂點密度。

+0

Mike說得對,索引在這裏沒有什麼區別...... st_coveredby指的是另一個函數,它指向用C編寫的postGIS contrib文件。它使用迭代過程來確定包含哪個點(raycrossing邏輯我相信) 。它使查詢對於包含在多邊形中的點的數量表現敏感......大的多邊形執行速度明顯較慢,並且您的5mb多邊形非常大。同意邁克的解決方案,但另一種可能性是考慮優化您的postgres服務器或者可能爲其提供更多硬件。 – Twelfth

+0

我已經分解了我的國家多邊形,現在它完美。感謝幫助。 –