PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để chuyển đổi giữa một hoạt động được lập chỉ mục và không được lập chỉ mục tùy thuộc vào đầu vào?

Tôi không nghĩ rằng nó có thể được thực hiện trong SQL thuần túy.

Việc dịch điều này sang PL / pgSQL khá đơn giản.

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$

Tôi đã xác minh rằng nó sử dụng chỉ mục địa lý <75 và btree (reply_count, convo_id) chỉ số ở mức 75 trở lên.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để biểu diễn nhiều thuộc tính tương tự của một thực thể trong cơ sở dữ liệu?

  2. Generate_series in Postgres từ ngày bắt đầu và ngày kết thúc trong một bảng

  3. Ẩn danh PostgreSQL theo yêu cầu

  4. Mẹo lưu trữ bản sao lưu PostgreSQL trên Google Cloud (GCP)

  5. PostgreSQL chia cho 0 khi đặt hàng