postgreSQL的索引
postgreSQL的索引主要有如下幾類:B-tree、Hash、GIN、GiST、SP-GiST、BRIN。每個索引都有特定的算法來匹配不同的類型數據的查詢。
B-tree
? ? ? ?索引可以應用于等值和范圍查詢,例如:<,<=,=,>=,>, betwee, in, is null,還有like模糊查詢、排序。B-tree適合大多數數據類型,是默認創建使用的索引。
Hash
hash索引存儲的是被索引字段VALUE的哈希值,只支持等值查詢。
hash索引特別適用于字段VALUE非常長(不適合b-tree索引,因為b-tree一個PAGE至少要存儲3個ENTRY,所以不支持特別長的VALUE)的場景,例如很長的字符串,并且用戶只需要等值搜索,建議使用hash index。
GIN
gin是倒排索引,非常適合全文檢索或者包含多個關鍵字的數組。如jsonb格式的字段就可以使用gin索引
GIST
GiST索引不是一種單獨的索引類型,而是一種架構,可以在該架構上實現很多不同的索引策略。從而可以使GiST索引根據不同的索引策略,而使用特定的操作符類型。
索引適用于像like '%foo';的模糊查詢,如create extension if not exists pg_trgm; CREATE INDEX trgm_idx ON test_trgm USING GIST (t gist_trgm_ops);
BRIN 塊級索引
? ? ? ?關鍵字:索引占用空間小,物理上連續的存儲時查詢很快。
? ? ? ?Block Range Index的簡稱,適用塊的區域搜索,即物理位置是相鄰的。BRIN 索引是塊級索引,可以很好的解決空間問題。有別于B-TREE等索引,BRIN記錄并不是以行號為單位記錄索引明細,而是記錄每個數據塊或者每段連續的數據塊的統計信息,如會保存128個塊(默認)數據(1MB)的最小和最大值。因此BRIN索引空間占用特別的小,對數據寫入、更新、刪除的影響也很小。
? ? ? ?BRIN屬于LOSSLY索引,當被索引列的值與物理存儲相關性很強時,例如在時間或序列字段創建BRIN索引,通過BRIN索引進行等值、范圍查詢時效果很棒。如設備上報的事件,按時間順序排列并插入,一段時間內的事件記錄存儲的物理位置是相鄰的,因此查詢一段時間內的事件,效率很高。
? ? ? ?如果物理位置不相鄰,可以使用如下命令整理CLUSTER [VERBOSE] table_name [ USING index_name ]。
總結
以上是生活随笔為你收集整理的postgreSQL的索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何高效安全的将资源同步到本地数据库
- 下一篇: volatile关键字——保证并发编程中