如果我用途:
SET pg_trgm.similarity_threshold = 0.9;
... where column % 'some string s';
PostgreSQL对以下对象执行索引扫描:gin(列gin_trgm_ops)
相反,这应该是相同的:
... where similarity(column, 'some string s' ) >= 0.9
它执行顺序扫描而不使用索引。
来自文档:https://www.postgresql.org/docs/11/pgtrgm.htmltext % text
布尔值
如果其参数的相似性大于pg_trgm.similarity_threshold
设置的当前相似性阈值,则返回true。
为什么?
1条答案
按热度按时间vsdwdz231#
基本上,
WHERE
条件必须如下所示,才能允许索引扫描:在这里,
<indexed expression>
是您创建的索引,<operator>
是索引操作符类的操作符家族支持的操作符,<constant>
是在索引扫描期间保持不变的表达式(特别是,它只能包含STABLE
函数)。PostgreSQL中的一个例外是,如果您在
WHERE
条件中使用返回boolean
的函数,并且该函数具有允许PostgreSQL替换索引扫描的优化器支持函数。但是similarity
不是这样的函数。