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.