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

Optimalisasi kueri Postgres (memaksa pemindaian indeks)

Untuk pengujian tujuan Anda dapat memaksa penggunaan indeks dengan "menonaktifkan" pemindaian berurutan - paling baik hanya di sesi Anda saat ini:

SET enable_seqscan = OFF;

Jangan jangan gunakan ini di server yang produktif. Detailnya ada di manual di sini.

Saya mengutip "penonaktifan", karena Anda sebenarnya tidak dapat menonaktifkan pemindaian tabel berurutan. Tetapi opsi lain yang tersedia sekarang lebih disukai untuk Postgres. Ini akan membuktikan bahwa indeks multicolumn pada (metric_id, t) bisa digunakan - hanya tidak seefektif indeks pada kolom utama.

Anda mungkin mendapatkan hasil yang lebih baik dengan mengubah urutan kolom di PRIMARY KEY (dan indeks yang digunakan untuk mengimplementasikannya di balik tirai dengannya) ke (t, metric_id) . Atau buat tambahan indeks dengan kolom terbalik seperti itu.

  • Apakah indeks komposit juga bagus untuk kueri di bidang pertama?

Anda biasanya tidak perlu memaksakan rencana kueri yang lebih baik dengan intervensi manual. Jika menyetel enable_seqscan = OFF mengarah ke banyak rencana yang lebih baik, mungkin ada sesuatu yang tidak beres di database Anda. Pertimbangkan jawaban terkait ini:

  • Jauhkan PostgreSQL dari terkadang memilih paket kueri yang buruk


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panduan Pakar untuk Replikasi Slony untuk PostgreSQL

  2. Cara diam menginstal Postgresql di Ubuntu melalui. file docker?

  3. Cara Membuat Tabel Hanya jika Tidak Ada di PostgreSQL

  4. Istilah sintaks SQL untuk 'WHERE (col1, col2) <(val1, val2)'

  5. Bagaimana cara menghapus sejumlah baris tetap dengan penyortiran di PostgreSQL?