在項目中,遇到了一個存儲文本的字段, 頁面上展現的時候, 是一個查詢字段函數
以前用的 的是 ilike 這樣的查詢方法, 在數據量過100萬的時候, 查詢基本沒有效率.學習
例如 " where content ilike '%more%'; 測試
經過學習pg的手冊, 12 章節中的內容,spa
嘗試了以下2中方法:效率
SELECT 'a fat cat sat on a more and ate a fat rat' :: tsvector @@ 'more' :: tsquery; 這種返回的結果爲 t, ①
SELECT to_tsvector('dfsjalfjsl more dflasjfl top') @@ plainto_tsquery(' more '); 這種返回的結果爲f, ②搜索
特別注意如上的寫法,通過大量數據的測試下, 使用了① 方法,方法
若是要寫在 where 條件中, 數據
例如 : wher content::tsvector@@'more'::tsquery 項目
說明 : content 這個是你的文本存儲的字段, 大概意思就是, 將字段作一次數據上的處理, tsvector 是那個作數據處理的函數,查詢
'more' 是你要搜索的關鍵詞, 這個沒啥好解釋的
使用的場景 :
1 ilike 比較適合模糊的匹配, 而本文提供的方法是一種比較精確的, 歡迎你們去測試
2 效率的問題, ilike 在數據量大的狀況, 查詢速度不是通常慢,數據量過100萬的時候, 而本文提供的方法則速度很快,
暫時尚未測試出有沒有其餘未知的隱患, 歡迎你們來信交流學習.
因爲沒有通過大量的測試,致使本文中以上的結論失效了,
在實際的項目中, 我用了 where to_tsvector(content)@@to_tsquery('more');
content 爲要搜索 的表字段, more 爲搜索的關鍵詞,