Mari kita bahas pertanyaan Anda satu per satu:
Melihat metrik kinerja hanya dari satu eksekusi benar-benar bukan cara kerjanya. Anda harus mengambil rata-rata dari beberapa eksekusi sebelum menyimpulkan karena ada beberapa faktor yang berperan. Karena itu, MongoDB menyimpan dokumen yang paling sering digunakan dalam memori dan menyimpannya di sana kecuali jika harus menghasilkan memori untuk beberapa dokumen lain. Jadi, jika kueri mengakses dokumen yang sudah di-cache dari kueri sebelumnya, itu akan lebih cepat.
Juga dalam agregasi MongoDB menggunakan indeks hanya di awal jika ada. Misalnya $match
dan $sort
fase dapat menggunakan indeks. Dalam kasus Anda $match
adalah tahap pipa pertama jadi itu adalah kemenangan.
Di MongoDB data disimpan di BSON , jadi tanggal pada dasarnya adalah angka ketika mereka dibandingkan. Jadi tidak ada perbedaan.
Meskipun saya belum mengujinya, saya benar-benar ragu bahwa pendekatan time_bucket akan memberikan respons yang lebih cepat. Sejak created_at
akan selalu meningkat, indeks, dalam hal ini, juga akan ditambahkan ke akhir tanpa time_bucket. Selain itu, ukuran indeks akan relatif besar ketika dibuat pada array daripada pada bidang tanggal sederhana. Apakah itu tidak akan menyebabkan masalah pemasangan indeks di RAM.
Menggunakan time_bucket masuk akal ketika Anda menggunakan beberapa fungsi pada bidang tanggal sebelum mencocokkan. Jika Anda mengekstrak hanya tahun dari bidang tanggal sebelum mencocokkan, itu akan membuat indeks yang ada pada tanggal tidak berguna.
Itu selalu lebih baik untuk mentransmisikan parameter Anda agar sesuai dengan tipe data di database daripada sebaliknya.
Iya itu mungkin. Jika $and
, Anda cukup menentukan semua filter yang dipisahkan dengan koma di $match
fase. Jika $or
gunakan $or
operator.
Jika Anda memiliki dua $macth
fase satu per satu MongoDB menggabungkannya menjadi satu
. Jadi, Anda tidak perlu khawatir tentang menambahkan hasil dari beberapa fase pertandingan.
Sekarang Pengoptimalan . Anda Poin
Ya, kueri tercakup jauh lebih cepat.
Jika ukuran dokumen diperkecil dalam $group
tahap dengan menggunakan $project
, maka ya itu benar.
Ini belum tentu benar tetapi umumnya demikian. Anda dapat memeriksa jawaban ini .