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中文网其他相关文章!