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

Indeks GIN PostgreSQL lebih lambat dari GIST untuk pg_trgm?

Beberapa masalah menonjol:

Pertama, pertimbangkan untuk meningkatkan ke versi Postgres saat ini . Pada saat penulisan, itu adalah hal 9.6 atau hal 10 (saat ini beta). Sejak Hal 9.4 telah terjadi beberapa peningkatan untuk indeks GIN, modul tambahan pg_trgm dan data besar secara umum.

Selanjutnya, Anda membutuhkan lebih banyak RAM , khususnya work_mem . yang lebih tinggi pengaturan. Saya tahu dari baris ini di EXPLAIN keluaran:

Heap Blocks: exact=7625 lossy=223807

"merugi" dalam detail untuk Pemindaian Heap Bitmap (dengan nomor khusus Anda) menunjukkan kekurangan dramatis work_mem . Postgres hanya mengumpulkan alamat blok dalam pemindaian indeks bitmap alih-alih penunjuk baris karena itu diharapkan lebih cepat dengan work_mem rendah Anda pengaturan (tidak dapat menyimpan alamat yang tepat di RAM). Banyak lagi baris yang tidak memenuhi syarat yang harus difilter dalam Pemindaian Heap Bitmap berikut cara ini. Jawaban terkait ini memiliki detail:

Tapi jangan set work_mem juga tinggi tanpa mempertimbangkan seluruh situasi:

Mungkin ada masalah lain, seperti indeks atau tabel mengasapi atau lebih banyak kemacetan konfigurasi. Tetapi jika Anda hanya memperbaiki dua item ini, kuerinya harus banyak sudah lebih cepat.

Juga, apakah Anda benar-benar perlu mengambil semua 40k baris dalam contoh? Anda mungkin ingin menambahkan LIMIT small kecil ke kueri dan menjadikannya pencarian "tetangga terdekat" - dalam hal ini indeks GiST adalah pilihan yang lebih baik, karena itu seharusnya lebih cepat dengan indeks GiST. Contoh:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan jumlah total tabel di postgresql?

  2. Apakah menggunakan Dev/Test RDS adalah ide yang buruk untuk proyek Anda daripada RDS Produksi?

  3. Performa Pemindaian Heap Bitmap

  4. tanggal kolom tidak dapat dilemparkan secara otomatis untuk mengetikkan cap waktu dengan zona waktu Django/postgres

  5. Bagaimana Anda mendefinisikan fungsi postgres di Rails dan apa ruang lingkup dan masa pakainya?