1. 程式人生 > >PostgreSQL 模糊查詢最佳實踐

PostgreSQL 模糊查詢最佳實踐

作者
digoal

日期
2017-04-26

標籤
PostgreSQL , 模糊查詢 , 正則查詢 , pg_trgm , bytea , gin , 函式索引

背景
前模糊(有字首的模糊),後模糊(有後綴的模糊),前後模糊(無前後綴的模糊),正則匹配都屬於文字搜尋領域常見的需求。

PostgreSQL擁有很強的文字搜尋能力,除了支援全文檢索,還支援模糊查詢、正則查詢。內建的pg_trgm外掛是一般資料庫沒有的,可能很多人沒有聽說過。同時還內建了表示式索引、GIN索引的功能。

不同的模糊查詢需求,有不同的優化方法。

對於前模糊和後模糊,PostgreSQL則與其他資料庫一樣,可以使用btree來加速。後模糊可以使用反轉函式的函式索引來加速。

對於前後模糊和正則匹配,一種方法是使用pg_trgm外掛,利用GIN索引加速模糊和正則查詢(輸入3個或3個以上字元的模糊查詢效果很好)。另一種方法是自定義GIN表示式索引的方法,適合於定製的模糊查詢。

一、前模糊與後模糊的優化

  1. 前模糊(有字首的模糊)優化方法

使用b-tree可以支援前模糊的查詢。

1.1 當使用型別預設的index ops class時,僅適合於collate="C"的查詢(當資料庫預設的lc_collate<>C時,索引和查詢都需要明確指定collate "C")。

索引、查詢條件的collate必須一致才能使用索引。

原文連結