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

Bagaimana cara meningkatkan kinerja kueri berbasis tanggal pada tabel besar?

tampilan yang terwujud adalah cara untuk pergi untuk apa yang Anda diuraikan. Membuat kueri data hanya-baca selama beberapa bulan terakhir berfungsi tanpa menyegarkannya. Anda mungkin ingin membuat kasus khusus bulan ini jika Anda perlu menutupinya juga.

Kueri yang mendasarinya masih dapat memanfaatkan indeks, dan ada dua arah yang dapat Anda ambil:

Pertama, indeks parsial seperti yang Anda miliki sekarang tidak akan membeli banyak dalam skenario Anda, tidak sepadan. Jika Anda mengumpulkan lebih banyak data bulan dan sebagian besar kueri berdasarkan bulan (dan menambahkan / menghapus baris berdasarkan bulan) partisi tabel mungkin sebuah ide, maka indeks Anda juga dipartisi secara otomatis. Saya akan mempertimbangkan Postgres 11 atau bahkan Postgres 12 yang akan datang untuk ini.)

Jika baris Anda lebar , buat indeks yang memungkinkan pemindaian hanya indeks . Seperti:

CREATE INDEX reportimpression_covering_idx ON reportimpression(datelocal, views, gender);

Terkait:

Atau INCLUDE kolom tambahan di Postgres 11 atau yang lebih baru:

CREATE INDEX reportimpression_covering_idx ON reportimpression(datelocal) INCLUDE (views, gender);

Lainnya , jika baris Anda secara fisik diurutkan berdasarkan datelocal , pertimbangkan indeks BRIN . Ini sangat kecil dan mungkin secepat indeks B-tree untuk kasus Anda. (Tetapi karena ukurannya yang sangat kecil akan lebih mudah disimpan dalam cache dan tidak terlalu banyak mengeluarkan data lain.)

CREATE INDEX reportimpression_brin_idx ON reportimpression USING BRIN (datelocal);

Anda mungkin tertarik dengan CLUSTER atau pg_repack untuk mengurutkan baris tabel secara fisik. pg_repack dapat melakukannya tanpa kunci eksklusif di atas meja dan bahkan tanpa indeks btree (diperlukan oleh CLUSTER ). Tapi ini adalah modul tambahan yang tidak disertakan dengan distribusi standar Postgres.

Terkait:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tanda kurung siku pada nama tabel/kolom tidak didukung?

  2. Status SQL:42883, Tidak ada fungsi yang cocok dengan nama dan tipe argumen yang diberikan. Tapi fungsi itu benar-benar ada

  3. Mendeteksi baris dengan kombinasi angka yang sama di dua kolom pertama, dan memilih yang memiliki angka tertinggi di kolom ketiga

  4. Bagaimana cara menginstal luasql di Linux Ubuntu 16?

  5. Rails - hanya menemukan catatan yang memiliki_banyak catatan terkait