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

Tạo một chỉ mục duy nhất trên một cột không phải duy nhất

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:

Thêm câu trả lời của tôi cho câu hỏi tiếp theo của bạ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. Pl / pgSQL không có tham số $ 1 trong câu lệnh EXECUTE

  2. Cách đặt Định dạng đầu ra khoảng thời gian trong PostgreSQL

  3. Nhận giá trị nối tiếp mặc định sau khi INSERT bên trong PL / pgSQL

  4. Mẹo và thủ thuật của Postgres

  5. Sự cố mã hóa PostgreSQL khi thực hiện truy vấn từ dòng lệnh