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

Postgres Chậm nhóm theo truy vấn với max

Những gì bạn cần là "quét bỏ qua" hoặc " quét chỉ mục lỏng lẻo ". Trình lập kế hoạch của PostgreSQL chưa tự động triển khai những thứ đó, nhưng bạn có thể lừa nó sử dụng nó bằng cách sử dụng truy vấn đệ quy.

WITH RECURSIVE  t AS (
SELECT min(eventtype) AS eventtype FROM allevents
           UNION ALL
SELECT (SELECT min(eventtype) as eventtype FROM allevents WHERE eventtype > t.eventtype)
   FROM t where t.eventtype is not null
)
select eventtype, (select max(eventtime) from allevents where eventtype=t.eventtype) from t;

Có thể có một cách để thu gọn tối đa (thời gian sự kiện) vào truy vấn đệ quy thay vì thực hiện nó bên ngoài truy vấn đó, nhưng nếu vậy, tôi đã không sử dụng nó.

Điều này cần một chỉ mục trên (loại sự kiện, thời gian sự kiện) để hoạt động hiệu quả. Bạn có thể đặt nó là DESC vào thời gian diễn ra sự kiện, nhưng điều đó là không cần thiết. Điều này chỉ hiệu quả nếu loại sự kiện chỉ có một vài giá trị riêng biệt (21 trong số đó, trong trường hợp 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. Tính khả dụng cao của PostgreSQL với các kiến ​​trúc Master-Slave &Master-Master

  2. Tìm tên máy chủ PostgreSQL mà nó chạy trên đó

  3. Làm thế nào để giải quyết lỗi 'fe_sendauth:không có mật khẩu được cung cấp' trong Rails bằng PostgreSQL?

  4. Xuất bảng từ cơ sở dữ liệu Postgres (trên máy chủ) sang tệp csv (trên cục bộ) trong java

  5. Tìm nạp bài đăng từ những người dùng không chặn