1

現在、次のようなクエリを実行しています。

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;

どんな助けでも大歓迎です。

4

1 に答える 1