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

入力に応じて、インデックス付き操作とインデックスなし操作を切り替える方法は?

    純粋なSQLでは実行できないと思います。

    これをPL/pgSQLに変換するのは非常に簡単です。

    CREATE OR REPLACE FUNCTION public.usp_get_data(i_distance_choice integer, i_longitude double precision, i_latitude double precision)
     RETURNS TABLE(convo_id bigint)
     LANGUAGE plpgsql
     STABLE
    AS $function$
        BEGIN
          IF i_distance_choice < 75 then
            return query SELECT po.convo_id
              FROM post po
              WHERE ST_DWithin(po.geog, ST_SetSRID(ST_MakePoint(i_longitude, i_latitude), 4326), i_distance_choice * 1609.34)
              ORDER BY po.reply_count DESC, convo_id DESC
              LIMIT 10;
          ELSE
            return query SELECT po.convo_id
              FROM post po
              WHERE po.geog<->ST_SetSRID(ST_MakePoint(i_longitude, i_latitude), 4326) < i_distance_choice * 1609.34
              ORDER BY po.reply_count DESC, convo_id DESC
              LIMIT 10;
          END IF;
        END
    $function$
    

    地理インデックス<75とbtree(reply_count, convo_id)を使用していることを確認しました 75以上のインデックス。




    1. 脱出する方法は? (疑問符)RailsでPostgresqlJSONBタイプをクエリする演算子

    2. 文字オラクルの後に文字列を取得する方法

    3. MySQL-正しいタイムゾーンで時間を保存する方法は? (Javaから)

    4. mysqlカウントグループ