Chỉ mục chỉ có thể lập chỉ mục các hàng thực, không phải các hàng tổng hợp. Vì vậy, có, theo như chỉ mục mong muốn, tạo một bảng với các giá trị duy nhất như bạn đã đề cập là lựa chọn duy nhất của bạn. Thực thi tính toàn vẹn của tham chiếu với ràng buộc khóa ngoại từ data.day
đến days.day
. Điều này có thể cũng là tốt nhất cho hiệu suất, tùy thuộc vào tình huống hoàn chỉnh.
Tuy nhiên, vì đây là về hiệu suất , có một giải pháp thay thế:bạn có thể sử dụng CTE đệ quy để mô phỏng quá trình quét chỉ mục lỏng lẻo:
WITH RECURSIVE cte AS (
( -- parentheses required
SELECT day FROM data ORDER BY 1 LIMIT 1
)
UNION ALL
SELECT (SELECT day FROM data WHERE day > c.day ORDER BY 1 LIMIT 1)
FROM cte c
WHERE c.day IS NOT NULL -- exit condition
)
SELECT day FROM cte;
Dấu ngoặc đơn xung quanh SELECT
đầu tiên là bắt buộc vì ORDER BY
đính kèm và LIMIT
điều khoản. Xem:
Điều này chỉ cần một chỉ mục đơn giản vào day
.
Có nhiều biến thể khác nhau, tùy thuộc vào truy vấn thực tế của bạn:
- 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ỉ mục không được sử dụng trong truy vấn phạm vi ngày
- Chọn trước hàng trong mỗi GROUP BY nhóm?
Thêm câu trả lời của tôi cho câu hỏi tiếp theo của bạn: