PostGIS
切換深色/淺色/自動模式 - PostGIS 空間資料庫 切換深色/淺色/自動模式 - PostGIS 空間資料庫 切換深色/淺色/自動模式 - PostGIS 空間資料庫 回到首頁 - PostGIS 空間資料庫

為什麼使用大型形狀時速度會變慢?

因為它們很大!假設其他因素相同,對加拿大有 100,000 個頂點的多邊形進行計算,會比對科羅拉多州有 5 個頂點的多邊形進行計算花更久的時間。

導致花費額外時間的原因是什麼?

  • 光是將物件載入記憶體就會花時間。大於 4kb 的物件(任何具有超過約 200 個頂點的物件)將被 PostgreSQL TOAST 系統 切成更小的部分,並儲存在側邊表格中。將物件載入記憶體需要擷取所有部分,然後將其串接在一起。它們通常也已在儲存空間中進行壓縮,因此也會有解壓縮的步驟。
  • 為了測試一個非常局部的問題必須取用整個物件。你可能只關心太平洋上的一艘漁船距加拿大海岸線是否 100 公里,但你會為了回答這個問題而將所有大西洋省份載入記憶體中。
  • 大量的頂點執行計算可能會花很長的時間。PostGIS 會盡力暫時索引和快取幾何圖形的索引資訊,以維持處理的差異,但較大的物件仍然較大。
  • 空間大型物件的邊界框也很大,這表示索引掃描效率不佳。即使是頂點相對較少的物件,不佳的邊界框也可能導致大量運算時間。以法國的邊界框為例,其不僅包括法國本土,也包含大西洋彼岸的聖勞倫斯灣中的聖皮埃爾和密克隆群島。因此,在冰島周圍的查詢可能會將法國納入索引掃描,然後必須透過更耗費計算成本的方式將法國排除在外。

有哪些解決方法?

  • 提升大型物件效能最有效的工具就是 ST_Subdivide()。它會輸入一個大型幾何,然後輸出一個更小的幾何組,且每個多邊形的頂點數目都有一個固定最大值。透過將物件切割成更小的部分,同時透過主鍵保留對原始資料表的參照,您可以有效「正常化」您的幾何圖形,使其大小更為一致,以加快空間搜尋。有使用過此方法來預先處理幾何圖形的所有使用者都報告了不錯的結果。