PostgreSQL LIKE 查詢:效能瓶頸與最佳化策略
PostgreSQL 的 LIKE
查詢以其計算強度而聞名,針對特定資料庫表表現出不一致的效能。 雖然有些查詢在 200-400 毫秒內完成,但其他查詢最多需要 30 秒。
標準索引限制
在 owner1
欄位上使用 B 樹索引的初始嘗試未能提高效能。 對各種 LIKE
語法變體的實驗也沒有產生顯著的結果。
三元組索引:卓越的解決方案
pg_trgm
擴充提供了三元組索引 (GIN/GiST),它為 LIKE
和 ILIKE
操作提供了顯著的效能增強,尤其是對於較長的字串。 重要的是,這些索引還支援短於三個字元的單字。
最佳化前綴匹配
對於沒有前導通配符的搜索,請考慮以下替代方案:
^@
運算子/starts_with()
函數(PostgreSQL 11 ): PostgreSQL 11 中引入的^@
運算子和starts_with()
函數在與SP-GiST 索引一起使用時提供高效能的前綴匹配.COLLATE "C"
: 使用 COLLATE "C"
建立的索引的行為與 text_pattern_ops
運算符類別類似,可實現與 B 樹索引的最佳化前綴相符。 text_pattern_ops
運算子類別: 此運算子類別建立專為左錨定模式設計的 B 樹索引(無前導通配符)。 其他資源
要更詳細地了解 PostgreSQL 中的模式匹配,請參閱以下資源:
以上是為什麼我的 PostgreSQL LIKE 查詢如此緩慢,如何加快速度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!