使用 LIKE 的查询非常慢

rob*_*y22 2 postgresql indexing optimization postgresql-performance

我有一个包含超过 30,000,000 个条目的数据库。当对字段执行查询(包括ORDER BY子句)时text=运算符会产生相对较快的结果。然而我们注意到,当使用该LIKE运算符时,查询变得非常慢,需要几分钟才能完成。例如:

SELECT * FROM work_item_summary WHERE manager LIKE '%manager' ORDER BY created;

查询计划

对正在搜索的关键字创建索引当然会大大加快查询速度。问题是我们必须支持对任意模式和任意列的查询,使得这个解决方案不可行。

我的问题是:

  1. 为什么LIKE查询比查询慢得多=
  2. 有没有其他方法可以优化这些通用查询,或者对于具有如此多条目的数据库来说是最好的?

Erw*_*ter 5

您的查询计划显示了顺序扫描,这对于大表来说很,而且也不足为奇,因为您的LIKE模式具有普通 B 树索引无法支持的前导通配符。

您需要添加索引支持。要么是支持任何和所有模式的三元组 GIN 索引,要么是COLLATE "C"反转字符串上的 B 树表达式索引,专门针对前导通配符。

看: