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

Truy vấn bản ghi mới nhất hiệu quả với Postgresql

Nếu bạn không muốn thay đổi mô hình dữ liệu của mình, bạn có thể sử dụng DISTINCT ON để tìm nạp bản ghi mới nhất từ ​​bảng "b" cho mỗi mục nhập trong "a":

SELECT DISTINCT ON (a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY a.id, b.date DESC

Nếu bạn muốn tránh "sắp xếp" trong truy vấn, hãy thêm chỉ mục như thế này might giúp bạn, nhưng tôi không chắc:

CREATE INDEX b_id_date ON b (id, date DESC)

SELECT DISTINCT ON (b.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY b.id, b.date DESC

Ngoài ra, nếu bạn muốn sắp xếp các bản ghi từ bảng "a" theo một cách nào đó:

SELECT DISTINCT ON (sort_column, a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY sort_column, a.id, b.date DESC

Các phương pháp thay thế

Tuy nhiên, tất cả các truy vấn trên vẫn cần đọc tất cả các hàng được tham chiếu từ bảng "b", vì vậy nếu bạn có nhiều dữ liệu, nó vẫn có thể quá chậm.

Bạn có thể tạo một bảng mới, bảng này chỉ giữ bản ghi "b" mới nhất cho mỗi a.id - hoặc thậm chí di chuyển các cột đó vào chính bảng "a".



  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 cách nào để đặt lại SUM đang chạy sau khi nó đạt đến một ngưỡng?

  2. Chỉ mục cụm và không cụm trong PostgreSQL

  3. Kiểm tra xem một hàng có tồn tại hay không trong postgresql

  4. Tạo bảng trong hình ảnh docker PostgreSQL

  5. Chuyển id người dùng đến trình kích hoạt PostgreSQL