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

リレーショナルクエリと組み合わせたPostgresjsonbクエリのパフォーマンスの向上

    遅いクエリは、44255行すべての大きなjsonbデータをデトーストし、解析された値を並べ替えて実行して、上位20行を選択します。 (なぜそれがそのように熱心にdeTOASTingを行うのか分かりません)。そのため、44235JSONBは破棄されるためにdeTOASTされました。

    高速クエリは、(おそらく)ハッシュ結合からTOASTポインターを返し、それらの小さなポインターで行を並べ替えてから、20人の生存者のみをdeTOASTします。 EXPLAIN ANALYZEの場合、サバイバーをデトーストすることすらなく、ポインターを破棄するだけです。

    それが「理由」です。どうすればよいかというと、一番上の部分の下にあるクエリを本当に変更できない場合は、サーバー側で何かできることはないと思います。

    >

    クエリをより大幅に変更できる場合は、CTEを使用して実行時間を改善できます。 CTEにjsonb全体を選択させてから、CTEの選択により値を引き出します。

    WITH T as (select cfiles.property_values as "1907", <rest of query>) 
    SELECT "1907"->>'name1', "1907"->>'name2', <rest of select list> from T;
    


    1. SQLクエリ、各グループで最新の5つを選択

    2. PHPMySQLカウントクエリの結果は整数ではなく文字列です

    3. MySqlを削除する前にトリガーする

    4. 特定の条件を満たす連続日数の最大値をチェックする