Indeks adalah cara khas untuk mempercepat kueri dalam sistem basis data normal. Tidak ada perbedaan antara MongoDB dan sistem database berbasis dokumen. Artikel ini memberikan wawasan tentang indeks di MongoDB, untuk pengoptimalan kueri.
Indeks di Mongo:
Default
_id adalah objek ObjectId, tipe BSON 12-byte yang menjamin keunikan dalam koleksi. ObjectId dihasilkan berdasarkan stempel waktu, ID mesin, ID proses, dan penghitung inkremental proses-lokal.
Bidang Tunggal
Untuk indeks satu bidang dan operasi pengurutan, urutan pengurutan (yaitu naik atau turun) dari kunci indeks tidak menjadi masalah karena MongoDB dapat melintasi indeks di kedua arah. Nilai indeks adalah jenis indeks. Misalnya, 1 menunjukkan urutan menaik dan -1 menunjukkan urutan menurun.
db.friends.createIndex( { "name" : 1 } )
Bidang Majemuk
Urutan bidang yang tercantum dalam indeks majemuk memiliki arti penting. Misalnya, jika indeks gabungan terdiri dari { userid:1, skor:-1 }, indeks mengurutkan terlebih dahulu berdasarkan userid dan kemudian, dalam setiap nilai userid, mengurutkan berdasarkan skor.
db.products.createIndex( { "item": 1, "stock": 1 } )
Beberapa Kunci
MongoDB menggunakan beberapa indeks untuk mengindeks konten dalam array. MongoDB membuat entri indeks terpisah untuk setiap elemen array. Anda tidak perlu secara eksplisit membuat banyak kunci.
Indeks Teks
Koleksi dapat memiliki paling banyak satu indeks teks.
Biaya kinerja untuk indeks teks:
indeks teks bisa besar. Mereka berisi satu entri indeks untuk setiap kata post-stemed unik di setiap bidang yang diindeks untuk setiap dokumen yang dimasukkan.
indeks teks akan memengaruhi throughput penyisipan karena MongoDB harus menambahkan entri indeks untuk setiap kata pasca-batang unik di setiap bidang yang diindeks dari setiap dokumen sumber baru.
db.reviews.createIndex( { comments: "text" } )
Indeks hash
Buat kueri konten berdasarkan nilai hashnya. Hash adalah fungsi yang dihitung berdasarkan nilainya. Nilai hash dirancang untuk menjadi nilai yang berbeda. Satu keuntungannya adalah sangat cepat, yang mengambil O(1) paling banyak tetapi dengan kontrak pohon pencarian biner normal akan mengambil O(Log(N)). Hash secara teoritis akan lebih cepat daripada implementasi pohon pencarian biner normal. Tetapi kelemahannya adalah indeks hash yang melakukan pencarian rentang akan sangat lambat dari indeks normal.
Ini contoh di python untuk membangun indeks hash
db.active.createIndex( { a: "hashed" } )