PostgreSQL 模糊查詢最佳實踐
阿新 • • 發佈:2019-02-01
作者
digoal
日期
2017-04-26
標籤
PostgreSQL , 模糊查詢 , 正則查詢 , pg_trgm , bytea , gin , 函式索引
背景
前模糊(有字首的模糊),後模糊(有後綴的模糊),前後模糊(無前後綴的模糊),正則匹配都屬於文字搜尋領域常見的需求。
PostgreSQL擁有很強的文字搜尋能力,除了支援全文檢索,還支援模糊查詢、正則查詢。內建的pg_trgm外掛是一般資料庫沒有的,可能很多人沒有聽說過。同時還內建了表示式索引、GIN索引的功能。
不同的模糊查詢需求,有不同的優化方法。
對於前模糊和後模糊,PostgreSQL則與其他資料庫一樣,可以使用btree來加速。後模糊可以使用反轉函式的函式索引來加速。
對於前後模糊和正則匹配,一種方法是使用pg_trgm外掛,利用GIN索引加速模糊和正則查詢(輸入3個或3個以上字元的模糊查詢效果很好)。另一種方法是自定義GIN表示式索引的方法,適合於定製的模糊查詢。
一、前模糊與後模糊的優化
- 前模糊(有字首的模糊)優化方法
使用b-tree可以支援前模糊的查詢。
1.1 當使用型別預設的index ops class時,僅適合於collate="C"的查詢(當資料庫預設的lc_collate<>C時,索引和查詢都需要明確指定collate "C")。
索引、查詢條件的collate必須一致才能使用索引。