Terlalu menambahkan sedikit lagi ke baloo jawabannya.
Pada masalah cap waktu vs. panjang. Umumnya server MongoDB tidak akan melihat perbedaan. Panjang penyandian BSON adalah sama (64 bit). Anda mungkin melihat kinerja yang berbeda di sisi klien tergantung pada pengkodean driver. Sebagai contoh, di sisi Java a menggunakan driver 10gen, stempel waktu dirender sebagai Date
itu jauh lebih berat daripada Long
. Ada driver
yang mencoba menghindari overhead tersebut.
Masalah lainnya adalah Anda akan melihat peningkatan kinerja jika Anda menutup rentang untuk bidang indeks pertama. Jadi jika Anda menggunakan indeks yang disarankan oleh baloo :
db.collection.ensureIndex({start: 1, final: 1})
Kueri Anda akan berkinerja (berpotensi jauh lebih baik) jika kueri Anda adalah:
db.collection.find({start:{$gt:DateTime(...),$lt:DateTime(...)},
final:{$lt:DateTime(...)}})
Secara konseptual, jika Anda menganggap indeks sebagai pohon, rentang tertutup membatasi kedua sisi pohon, bukan hanya satu sisi. Tanpa rentang tertutup, server harus "memeriksa" semua entri dengan start
lebih besar dari cap waktu yang diberikan karena tidak mengetahui hubungan antara start
dan final
.
Anda bahkan mungkin menemukan bahwa kinerja kueri tidak lebih baik menggunakan indeks bidang tunggal seperti:
db.collection.ensureIndex({start: 1})
Sebagian besar penghematan berasal dari pemangkasan ladang pertama. Kasus di mana hal ini tidak terjadi adalah ketika kueri dicakup oleh indeks atau pengurutan/pengurutan untuk hasil dapat diturunkan dari indeks.
HTH - Rob.