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

SELECT DISTINCT chậm hơn mong đợi trên bảng của tôi trong PostgreSQL

Mặc dù chưa có quét bỏ qua chỉ mục trong Postgres, hãy mô phỏng nó:

WITH RECURSIVE cte AS (
   (   -- parentheses required
   SELECT product_id
   FROM   tickers
   ORDER  BY 1
   LIMIT  1
   )
   UNION ALL
   SELECT l.*
   FROM   cte c
   CROSS  JOIN LATERAL (
      SELECT product_id
      FROM   tickers t
      WHERE  t.product_id > c.product_id  -- lateral reference
      ORDER  BY 1
      LIMIT  1
      ) l
   )
TABLE  cte;

Với chỉ mục trên (product_id) chỉ có 40 ID sản phẩm duy nhất trong bảng cái này phải là Nhanh . Với vốn F .
Chỉ số PK trên (product_id, trade_id) cũng tốt cho nó!

Chỉ với rất ít hàng cho mỗi product_id (ngược lại với phân phối dữ liệu của bạn), DISTINCT / DISTINCT ON sẽ nhanh hơn hoặc nhanh hơn.

Công việc để thực hiện quét bỏ qua chỉ mục đang diễn ra.
Xem:

  • Chọn hàng đầu tiên trong mỗi GROUP BY nhóm?
  • Tối ưu hóa truy vấn GROUP BY để truy xuất hàng mới nhất cho mỗi người dùng
  • Chỉ số tổng hợp có tốt cho các truy vấn trên trường đầu tiên không?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres ĐỂ LOOP

  2. SAO CHÉP với tên tệp động

  3. TypeError:Đối tượng 'int' không hỗ trợ lập chỉ mục

  4. Cách chỉ định một tab trong COPY giao diện người dùng postgres

  5. Chỉ mục một phần không được sử dụng trong mệnh đề ON CONFLICT khi thực hiện nâng cấp trong Postgresql