Postgresql
PostGIS 可以在外部表上使用空間索引嗎?
我正在嘗試對一些外部空間表執行查詢,這些表比在普通空間表上執行的時間長幾個數量級,因為未使用索引。
索引似乎正在處理非空間查詢。
這是應該工作還是不支持?
假設目前的 Postgres 9.6,它可以工作。
Postgres 可以使用遠端 Postgres 伺服器上的索引。您可能需要做的不僅僅是本地表,autovacuum 不會
ANALYZE
自動為遠端表執行。首先閱讀手冊中的“遠端查詢優化”一章。更多詳細資訊的相關答案:
由於 PostGIS 是一個擴展,因此Postgres 9.6的這個新特性特別重要:
如果擴展在外部伺服器的選項中列入白名單,則允許發送擴展提供的運算符和函式以進行遠端執行 (Paul Ramsey)
當已知擴展存在於遠端數據庫的兼容版本中時,使用者可以啟用此功能。它允許更有效地執行涉及擴展運算符的查詢。
大膽強調我的。
索引的使用與操作符有關。計劃查詢時,各種 PostGIS 空間函式被轉換為在內部使用運算符。這個關於 SO 的相關答案有更多解釋:
假設 Postgres 9.6 用於本地和遠端伺服器,並且安裝了相同版本的 PostGIS,在本地伺服器上執行它應該可以解決問題:
ALTER SERVER your_foreign_server_name OPTIONS (ADD extensions 'postgis');