現在、次のようなクエリを実行しています。
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
両方を計算します。私の目標は、これら 2 つの列の類似度のしきい値が異なるため、各サブクエリの前にこのパラメーターを変更することです。first_name % 'fakeFirstName'
last_name % 'fakeLastName'
pg_trgm.similarity_threshold
たとえば値 0.2 でパラメータを変更するには、次の 2 つのオプションがあります。
SET pg_trgm.similarity_threshold = 0.2;
SELECT set_limit(0.2);
私は実行速度に非常に関心があります。つまり、GIST インデックスを使用する演算子では%
なく、GIN インデックスを使用する操作を使用することをお勧めします。<->
次のようなことをしようとしましたが、演算子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;
どんな助けでも大歓迎です。