PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara beralih antara operasi yang diindeks dan tidak diindeks tergantung pada input?

Saya tidak berpikir itu bisa dilakukan dalam SQL murni.

Cukup mudah untuk menerjemahkan ini ke 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$

Saya memverifikasinya menggunakan indeks geografi <75 dan btree (reply_count, convo_id) indeks pada 75 ke atas.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konversi array objek ke array yang kompatibel untuk nodejs/pg/unnest

  2. Kesalahan:Kolom tidak ada

  3. cara membuat tabel berdasarkan CSV secara otomatis ke dalam postgres menggunakan python

  4. Bagaimana cara mencoba beberapa SELECT hingga hasilnya tersedia?

  5. Pilih baris pertama di setiap grup GROUP BY?