PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Permintaan rekaman terbaru yang efisien dengan Postgresql

Jika Anda tidak ingin mengubah model data Anda, Anda dapat menggunakan DISTINCT ON untuk mengambil catatan terbaru dari tabel "b" untuk setiap entri di "a":

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

Jika Anda ingin menghindari "sort" dalam kueri, tambahkan indeks seperti ini mungkin membantu Anda, tetapi saya tidak yakin:

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

Atau, jika Anda ingin mengurutkan catatan dari tabel "a" dengan beberapa cara:

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

Pendekatan alternatif

Namun, semua kueri di atas masih perlu membaca semua baris yang direferensikan dari tabel "b", jadi jika Anda memiliki banyak data, mungkin masih terlalu lambat.

Anda dapat membuat tabel baru, yang hanya menyimpan catatan "b" terbaru untuk setiap a.id -- atau bahkan pindahkan kolom tersebut ke tabel "a" itu sendiri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. org.postgresql.util.PSQLException:Upaya koneksi gagal

  2. KESALAHAN:kehabisan memori pada mesin dengan RAM 32GB dan tanpa file swap

  3. PGSQL tidak dimuat di PHP 5.3 Windows di bawah IIS

  4. Menggunakan symfony dengan postgresql

  5. Ekspor tabel dari database Postgres (di server) ke file csv (di lokal) di java