hypopg是一個RDS PostgreSQL的擴展,有助于了解特定索引是否可以提高查詢的性能。虛擬索引并不是真實存在的索引,因此不耗費CPU、磁盤或其他資源,可以有效驗證索引是否有效。
您可以加入RDS PostgreSQL插件交流釘釘群(103525002795),進行咨詢、交流和反饋,獲取更多關于插件的信息。
前提條件
實例內核小版本為20230830或以上。
重要20230830內核小版本之前已支持此插件,但為了規范插件管理,提升RDS PostgreSQL在插件側的安全防護,RDS計劃在內核版本迭代中陸續對部分存在安全風險的插件進行優化,部分插件在低內核小版本無法創建,更多信息,請參見【產品/功能變更】RDS PostgreSQL限制創建插件說明。
如果您的實例內核小版本低于20230830,且已經使用了此插件,則不影響使用。
如果您首次創建或重新創建此插件,請升級內核小版本到最新。
您的賬號類型必須為高權限賬號。您可以在RDS控制臺目標實例的賬號管理中查看您的賬號權限類型。如果您的賬號類型為普通賬號,您需要創建高權限賬號,創建詳情請參見創建賬號。
開啟或關閉hypopg
說明
虛擬索引只在當前會話內有效。
開啟hypopg。
CREATE EXTENSION hypopg;
說明僅高權限賬號可以執行此命令。
關閉hypopg。
DROP EXTENSION hypopg;
說明僅高權限賬號可以執行此命令。
調試示例
創建表并插入測試數據。
create extension hypopg; CREATE TABLE hypo (id integer, val text) ; INSERT INTO hypo SELECT i, 'line ' || i FROM generate_series(1, 100000) i ; VACUUM ANALYZE hypo ;
查看默認執行計劃。
EXPLAIN SELECT val FROM hypo WHERE id = 1; QUERY PLAN -------------------------------------------------------- Seq Scan on hypo (cost=0.00..1791.00 rows=1 width=14) Filter: (id = 1) (2 rows)
創建虛擬索引。
SELECT * FROM hypopg_create_index('CREATE INDEX ON hypo (id)') ; indexrelid | indexname ------------+---------------------- 18284 | <18284>btree_hypo_id (1 row)
查看虛擬索引的效果。
EXPLAIN SELECT val FROM hypo WHERE id = 1; QUERY PLAN ---------------------------------------------------------------------------------- Index Scan using <18284>btree_hypo_id on hypo (cost=0.04..8.06 rows=1 width=10) Index Cond: (id = 1) (2 rows)
虛擬索引是“虛擬的”,并不會在實際運行SQL語句時使用??梢圆榭碨QL實際的運行計劃。
EXPLAIN ANALYZE SELECT val FROM hypo WHERE id = 1; QUERY PLAN --------------------------------------------------------------------------------------------------- Seq Scan on hypo (cost=0.00..1791.00 rows=1 width=10) (actual time=0.046..46.390 rows=1 loops=1) Filter: (id = 1) Rows Removed by Filter: 99999 Planning time: 0.160 ms Execution time: 46.460 ms (5 rows)
相關參考
關于hypopg的更多詳細說明,請參見HypoPG。
文檔內容是否對您有幫助?