在 postgres 查询中使用函数会跳过索引.使用应用了索引的函数的任何解决方案



例如:

如果删除较低函数,则查询性能优于使用较低函数。使用较低会跳过索引。是

SELECT X.article_number, X.online_description
FROM articles X
WHERE LOWER(X.online_description) % usp_get_search_terms ('coke');

如果条件为以下形式,则索引只能用于加速WHERE条件:

<indexed expression> <operator> <constant>

在这里,<operator>必须是索引的运算符类中的运算符,并且<constant>实际上不必是一个常量,而是在索引扫描期间固定的。

我假设%pg_trgm扩展的相似性运算符。然后,您需要一个带有gin_trgm_ops运算符类的 GIN 索引或一个带有gist_trgm_ops运算符类的 GiST 索引。

由于三元组操作无论如何都不区分大小写,因此应从查询中删除lower()。否则,您必须在lower(online_description)上创建索引,这将浪费 CPU。

最新更新