MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Permintaan MongoDB sederhana sangat lambat meskipun indeks disetel

Anda tidak memiliki indeks apa pun yang akan digunakan mongo secara otomatis untuk itu, jadi mongo melakukan pemindaian tabel penuh.

Seperti disebutkan dalam dokumen

Mengapa

Jika Anda memiliki indeks pada a,b - dan Anda mencari dengan a sendiri - indeks akan secara otomatis digunakan. Ini karena ini adalah awal dari indeks (yang cepat dilakukan), db dapat mengabaikan nilai indeks lainnya.

Indeks pada a,b tidak efisien saat mencari dengan b sendiri hanya karena tidak memberikan kemungkinan untuk menggunakan pencarian indeks dengan "dimulai dengan string tetap ini".

Jadi, baik:

  • Sertakan _reference_1_id dalam kueri (mungkin tidak relevan)
  • ATAU tambahkan indeks pada _reference_2_id (jika Anda sering melakukan kueri berdasarkan bidang)
  • ATAU gunakan petunjuk

Petunjuk

Mungkin opsi berbiaya terendah Anda saat ini.

Tambahkan petunjuk kueri untuk memaksa menggunakan _reference_1_id_1__reference_2_id_1_id_1 Anda indeks. Yang mungkin jauh lebih cepat daripada pemindaian tabel penuh, tetapi masih jauh lebih lambat daripada indeks yang dimulai dengan bidang yang Anda gunakan dalam kueri.

yaitu

db.mycoll
    .find({"_reference_2_id" : ObjectId("jkl7890123456")})
    .hint("_reference_1_id_1__reference_2_id_1_id_1");


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. PHP Startup Tidak dapat memuat pustaka dinamis php_mongo.dll

  2. Kueri luwak di mana nilainya bukan nol

  3. Bagaimana cara menghitung kemunculan dalam dokumen bersarang di mongodb?

  4. Bagaimana cara mengubah nama koleksi di luwak.model?

  5. Kueri Mongo di Subbidang