我有一個 postgres 表,其中有一列已歸檔(真/假)。我有一個用例,我每個月都會歸檔資料,所以現在我 90% 的資料是archived=true.
當我查詢我只想在archive=false99% 的時間查詢的表時,執行需要時間,因為當我與其他表連接或添加多個過濾器時它不使用索引。即使我強制 psql 使用這個索引,當我使用過濾器時,我也無法在其他列上使用索引。
我正在努力了解您如何優化此類設計,以便您的查詢始終快速。
uj5u.com熱心網友回復:
PostgreSQL 有有趣的索引方法,其中一種是部分索引。部分索引是節省一些磁盤空間和提高記錄查找性能的好方法。常見的規則是“在你負擔得起的時候使用它”——換句話說,如果你的所有查詢都涉及到某個過濾器,通常認為在索引定義中包含這樣的過濾器是一個好主意,以減小其大小并提高其性能。這是我們如何創建部分索引的示例:
create index non_archive_order_date_idx
on orders (order_date)
where archive=false;
如果我們正在優化的查詢在計費列上包含相同的過濾器,則查詢計劃程式將考慮此索引。并且過濾器針對表中總行量的一小部分,我們應該看到相應索引掃描的顯著性能改進。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/432606.html
標籤:PostgreSQL 查询优化
上一篇:獲取回圈內當前列的型別
