我目前正在做这样的查询:
SELECT * FROM (
(SELECT * from A WHERE first_name % 'fakeFirstName')
UNION
(SELECT * from B WHERE last_name % 'fakeLastName')
) AS result;
A 和 B 都是同一个基础表 C 的视图,具有完全相同的列。
但是,%
操作员使用 GUC 参数pg_trgm.similarity_threshold
来计算first_name % 'fakeFirstName'
和last_name % 'fakeLastName'
,我的目标是在每个子查询之前更改此参数,因为这两列的相似度阈值不同。
要更改pg_trgm.similarity_threshold
参数,例如值 0.2,我有两个选择:
SET pg_trgm.similarity_threshold = 0.2;
SELECT set_limit(0.2);
我非常关心执行速度,这意味着我更喜欢使用%
带有 GIN 索引的<->
操作而不是带有 GIST 索引的操作符。
我试图做类似下面的事情,但它没有工作,因为在set_limit()
使用运算符之前没有调用该函数%
:
SELECT * FROM (
(SELECT *, set_limit(0.2) from A WHERE first_name % 'fakeFirstName')
UNION
(SELECT *, set_limit(0.6) from B WHERE last_name % 'fakeLastName')
) AS result;
任何帮助都深表感谢。