sql >> データベース >  >> RDS >> PostgreSQL

パフォーマンスのためのPostgreSQLCROSSJOINインデックス作成

    あなたの主な問題はORです —ORがある限り、まともなパフォーマンスを得ることができません。 WHEREでこのように 条項。

    クエリを次のように書き直します。

    SELECT * FROM main_transaction t 
       JOIN main_profile p ON t.profile_id = p.id
       JOIN main_customer c ON p.user_id = c.id 
    WHERE upper(t.request_no) LIKE upper(concat('%','0-90-6 12 ','%'))
    UNION
    SELECT * FROM main_transaction t 
       JOIN main_profile p ON t.profile_id = p.id
       JOIN main_customer c ON p.user_id = c.id 
    WHERE upper(c.phone) LIKE upper(concat('%','0-90-6 12','%'));
    

    次に、次のインデックスがあることを確認します(idのインデックスは別として) s):

    CREATE INDEX ON main_transaction (profile_id);
    CREATE INDEX ON main_transaction USING gin (upper(request_no) gin_trgm_ops);
    CREATE INDEX ON main_profile (user_id);
    CREATE INDEX ON main_customer USING gin (upper(phone) gin_trgm_ops);
    

    それが違いを生むはずです。




    1. テーブルフィールドにハイフンを含めることはできますか?

    2. オブジェクトJSONB内の配列から要素を削除する

    3. 1つのパラメータで複数の値を渡す

    4. PostgresJSON配列に文字列が含まれているかどうかを確認します