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)
và 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?