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

Bagaimana meningkatkan jumlah kueri teks untuk Django dengan Postgres

Jika Anda menjatuhkan SearchRank dan cukup filter menggunakan kueri itu akan menggunakan indeks GIN dan berkinerja jauh lebih cepat:

query = SearchQuery(termo,config='portuguese')
entries = Article.objects.filter(search_vector=query)

Anda dapat menambahkan .explain() untuk mengakhiri untuk melihat kueri dan melihat apakah indeks digunakan:

print(entries.explain(analyze=True))

Anda akan melihat kueri menggunakan Bitmap Heap Scan dan Waktu Eksekusi akan jauh lebih cepat.

Bitmap Heap Scan on your_table
...
Planning Time: 0.176 ms Execution Time: 0.453 ms

Saat Anda membuat anotasi seperti di atas, Anda membuat anotasi setiap Article objek - jadi postgres memutuskan untuk melakukan Pemindaian Seq (atau Pemindaian Seq Paralel) yang diputuskannya lebih efisien. Info lebih lanjut di sini

Coba tambahkan .explain(verbose=True) atau .explain(analyze=True) ke metode SearchRank awal Anda untuk membandingkan.

query = SearchQuery(termo,config='portuguese')
search_rank = SearchRank(F('search_vector'), query)
entries = Article.objects.annotate(rank=search_rank).filter(search_vector=query).order_by('-rank')

print(entries.explain(analyze=True))

Saya sendiri menghadapi masalah ini, dengan tabel dengan 990k entri yang membutuhkan waktu ~ 10 detik. Jika Anda dapat memfilter kueri sebelum anotasi menggunakan bidang lain - ini akan mendorong perencana kueri kembali menggunakan Indeks.

Dari jawaban ini




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batasan postgres

  2. Paksa Liquibase untuk memetakan Blob ke BYTEA di PostgreSQL

  3. Memasukkan nilai DEFAULT ke dalam kolom ketika parameternya NULL

  4. Bagaimana cara memenuhi batasan force_srid_coordinate dengan GeoDjango/PostGIS?

  5. Cara mengatasi masalah AWS RDS:psycopg2.OperationalError:FATAL:otentikasi kata sandi gagal untuk root pengguna