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

Mengapa MongoDB tidak menggunakan persimpangan indeks?

Saat Anda menggunakan explain(true) Anda dapat melihat bahwa pengoptimal mempertimbangkan untuk menggunakan persimpangan indeks dan memilih untuk tidak:

"cursor" : "BtreeCursor Age", // Chosen plan.
...
"allPlans" : [
   {
       "cursor" : "BtreeCursor Age",
       ...
   },
   {
       "cursor" : "BtreeCursor Name",
       ...
   },
   {
       "cursor" : "Complex Plan", // Index intersection.
       ...
   }
]

MongoDB tidak akan pernah memilih persimpangan jika ada indeks majemuk yang cukup. Batasan lain dapat ditemukan di tiket Jira untuk Persimpangan Indeks:

Pengoptimal kueri dapat memilih rencana persimpangan indeks jika kondisi berikut berlaku:
1. Sebagian besar dokumen dalam koleksi yang relevan adalah disk-resident. Keuntungan dari persimpangan indeks adalah dapat menghindari pengambilan dokumen lengkap ketika ukuran persimpangan kecil. Jika dokumen sudah ada di memori, tidak ada keuntungan dengan menghindari pengambilan.
2. Predikat kueri adalah interval titik tunggal, bukan predikat rentang atau kumpulan interval. Kueri pada interval titik tunggal mengembalikan dokumen yang diurutkan berdasarkan lokasi disk, yang memungkinkan pengoptimal untuk memilih rencana yang menghitung persimpangan dengan cara yang tidak menghalangi. Ini umumnya lebih cepat daripada mode alternatif komputasi persimpangan, yaitu membangun tabel hash dengan hasil dari satu indeks, dan kemudian menyelidikinya dengan hasil dari indeks kedua.
3. Tak satu pun dari indeks yang akan berpotongan sangat selektif. Jika salah satu indeks selektif maka pengoptimal akan memilih rencana yang hanya memindai indeks selektif ini.
4. Ukuran perpotongan relatif kecil terhadap jumlah kunci indeks yang dipindai oleh salah satu solusi indeks tunggal. Dalam hal ini, pelaksana kueri dapat melihat kumpulan dokumen yang lebih kecil menggunakan perpotongan indeks, yang berpotensi memungkinkan kita untuk memperoleh manfaat dari pengambilan yang lebih sedikit dari disk.

MongoDB memiliki banyak keterbatasan pada persimpangan yang membuatnya kecil kemungkinannya untuk benar-benar digunakan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo mengonversi dokumen yang disematkan ke array

  2. Operator Agregasi MongoDB untuk Bagian Tanggal Pengembalian

  3. Metode 'statis' luwak vs. metode 'contoh'

  4. Bagaimana cara memperbarui dokumen Mongo setelah memasukkannya?

  5. Pencarian MongoDB ketika bidang asing adalah array objek