使用Postgres jsonb 查詢數組中的結構
Jsonb 數組可以在Postgres 中儲存結構化數據,方便使用嵌套物件進行查詢。但是,使用順序索引存取數組值可能會導致順序掃描。
適當的索引以提高查詢效能
要最佳化涉及jsonb 陣列比較的查詢,特別是像提供了一種(檢查特定時間範圍內的事件) ,可以執行以下步驟採取:
基本方法(Postgres 12 和稍後)
SELECT l.* FROM locations l WHERE l.events @? '$[*] ? (@.event_slug == "test_1") ? (@.end_time.datetime() < "2014-10-13".datetime()'
利用物化視圖的高級方法
如果複雜查詢仍然導致效能不佳,請考慮建立具有規範化相關屬性的物化視圖:
建立事件資料型態:
CREATE TYPE event_type AS ( , event_slug text , start_time timestamp , end_time timestamp );
建立物化視圖:
CREATE MATERIALIZED VIEW loc_event AS SELECT l.location_id, e.event_slug, e.end_time -- start_time not needed FROM locations l, jsonb_populate_recordset(null::event_type, l.events) e;
索引物化視圖:
CREATE INDEX loc_event_idx ON loc_event (event_slug, end_time, location_id);
查詢物化視圖:
SELECT * FROM loc_event WHERE event_slug = 'test_1' AND end_time >= '2014-10-30 14:04:06 -0400'::timestamptz;
透過使用正確的運算符類並考慮物化視圖等高級方法,您可以為涉及jsonb 數組比較的查詢實現最佳效能資料。
以上是如何優化 jsonb 數組上的 Postgres 查詢以提高效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!