- Pengindeksan di MongoDB dapat meningkatkan prestasi dan throughput dengan mengurangkan bilangan dokumen penuh yang perlu dibaca, dengan itu meningkatkan prestasi aplikasi.
- MongoDB menyokong beberapa jenis indeks, termasuk indeks _id lalai, indeks sekunder, indeks kompaun, indeks multikey, dan indeks kompaun multikey. Setiap jenis berfungsi dengan tujuan tertentu dan digunakan untuk pelbagai jenis pertanyaan.
- lebih daripada satu indeks boleh ditakrifkan pada koleksi, tetapi pertanyaan hanya boleh menggunakan satu indeks semasa pelaksanaannya. Indeks terbaik dipilih semasa runtime oleh pengoptimuman pertanyaan MongoDB.
- Walaupun pengindeksan secara dramatik dapat meningkatkan operasi baca, ia juga menanggung kosnya sendiri. Operasi pengindeksan menduduki ruang dan menyebabkan overhead tambahan pada setiap memasukkan, mengemas kini, dan memadam operasi pada koleksi. Oleh itu, manfaat mengindeks koleksi baca-berat lebih daripada koleksi-koleksi berat.
- Pengindeksan adalah salah satu konsep yang lebih penting untuk bekerja dengan MongoDB. Pemahaman yang betul adalah kritikal kerana pengindeksan secara dramatik dapat meningkatkan prestasi dan throughput dengan mengurangkan bilangan dokumen penuh untuk dibaca, dengan itu meningkatkan prestasi permohonan kami. Kerana indeks boleh sedikit sukar difahami, siri dua bahagian ini akan melihat dengan lebih dekat kepada mereka. Dalam artikel ini kita akan meneroka lima jenis indeks berikut:
- indeks sekunder
- Indeks kompaun
- indeks multikey
- Indeks kompaun multikey
- Terdapat beberapa jenis lain untuk dibincangkan, tetapi saya secara logiknya menyimpannya untuk Bahagian 2 untuk memberikan pemahaman yang jelas dan mengelakkan sebarang kekeliruan. Walaupun lebih daripada satu indeks boleh ditakrifkan pada koleksi, pertanyaan hanya boleh menggunakan satu indeks semasa pelaksanaannya. Keputusan memilih indeks terbaik daripada pilihan yang ada dibuat pada masa yang diperlukan oleh pengoptimuman pertanyaan MongoDB. Artikel ini mengandaikan bahawa anda mempunyai pemahaman asas tentang konsep MongoDB (seperti koleksi, dokumen, dll.) Dan melakukan pertanyaan asas menggunakan PHP (seperti Cari dan Masukkan). Jika tidak, saya cadangkan anda membaca artikel pemula kami: Pengenalan kepada MongoDB dan MongoDB Revisited. Untuk siri ini kami akan menganggap kami mempunyai koleksi bernama jawatan yang dihuni dengan 500 dokumen yang mempunyai struktur berikut: Sekarang, mari kita meneroka pelbagai jenis pengindeksan secara terperinci.
<span>{ </span> <span>"_id": <span>ObjectId</span>("5146bb52d852470060001f4"), </span> <span>"comments": { </span> <span>"0": "This is the first comment", </span> <span>"1": "This is the second comment" </span> <span>}, </span> <span>"post_likes": 40, </span> <span>"post_tags": { </span> <span>"0": "MongoDB", </span> <span>"1": "Tutorial", </span> <span>"2": "Indexing" </span> <span>}, </span> <span>"post_text": "Hello Readers!! This is my post text", </span> <span>"post_type": "private", </span> <span>"user_name": "Mark Anthony" </span><span>}</span>Secara lalai, MongoDB mencipta indeks lalai pada medan _id untuk setiap koleksi. Setiap dokumen mempunyai medan _id yang unik sebagai kunci utama, 12-bait objek. Apabila tidak ada indeks lain yang tersedia, ini digunakan secara lalai untuk semua jenis pertanyaan. Untuk melihat indeks untuk koleksi, buka shell Mongodb dan lakukan yang berikut:
indeks sekunder
Bagi kes -kes di mana kita mahu menggunakan pengindeksan pada medan selain daripada bidang _id, kita perlu menentukan indeks tersuai. Katakan kami ingin mencari jawatan berdasarkan medan user_name. Dalam kes ini, kami akan menentukan indeks tersuai pada medan user_name koleksi. Indeks tersuai sedemikian, selain daripada indeks lalai, dipanggil indeks sekunder. Untuk menunjukkan kesan pengindeksan pada pangkalan data, mari kita secara ringkas menganalisis prestasi pertanyaan tanpa mengindeks terlebih dahulu. Untuk ini, kami akan melaksanakan pertanyaan untuk mencari semua jawatan yang mempunyai user_name dengan "Jim Alexandar".<span>{ </span> <span>"_id": <span>ObjectId</span>("5146bb52d852470060001f4"), </span> <span>"comments": { </span> <span>"0": "This is the first comment", </span> <span>"1": "This is the second comment" </span> <span>}, </span> <span>"post_likes": 40, </span> <span>"post_tags": { </span> <span>"0": "MongoDB", </span> <span>"1": "Tutorial", </span> <span>"2": "Indexing" </span> <span>}, </span> <span>"post_text": "Hello Readers!! This is my post text", </span> <span>"post_type": "private", </span> <span>"user_name": "Mark Anthony" </span><span>}</span>Kaedah penting yang sering digunakan dengan pengindeksan dijelaskan () yang mengembalikan maklumat yang berkaitan dengan pengindeksan. Output di atas jelas () adalah seperti yang ditunjukkan di bawah:
Beberapa kunci penting yang perlu dilihat ialah:
- kursor - Menunjukkan indeks yang digunakan dalam pertanyaan.
- BasicCursor menunjukkan bahawa indeks _id lalai digunakan dan MongoDB terpaksa mencari keseluruhan koleksi. Melangkah ke hadapan, kita akan melihat bahawa apabila kita menggunakan pengindeksan, btreecursor akan digunakan bukan BasicCursor . n - Menunjukkan bilangan dokumen pertanyaan yang dikembalikan (satu dokumen dalam kes ini).
- nscannedObjects - Menunjukkan bilangan dokumen yang dicari oleh pertanyaan (dalam kes ini, semua 500 dokumen koleksi telah dicari). Ini boleh menjadi operasi dengan overhead besar jika bilangan dokumen dalam koleksi sangat besar.
- nscanned - Menunjukkan bilangan dokumen yang diimbas semasa operasi pangkalan data.
- Sebaik -baiknya, n harus sama dengan atau dekat dengan NSCanned, yang bermaksud bilangan dokumen minimum telah dicari. Sekarang, mari kita laksanakan pertanyaan yang sama tetapi menggunakan indeks sekunder. Untuk membuat indeks, laksanakan perkara berikut dalam shell MongoDB:
Kami mencipta indeks di medan user_name
Dalam koleksi Posts menggunakan kaedah Pastikan (). Saya pasti anda telah mencatatkan nilai hujah pesanan kepada kaedah yang menunjukkan sama ada naik (1) atau menurun (-1) perintah untuk carian. Untuk lebih memahami perkara ini, perhatikan bahawa setiap dokumen mempunyai medan timestamp. Jika kita mahu jawatan paling terkini terlebih dahulu, kita akan menggunakan perintah menurun. Untuk jawatan tertua terlebih dahulu, kami akan memilih perintah menaik.
Selepas membuat indeks, kaedah yang sama () dan terangkan () digunakan untuk melaksanakan dan menganalisis pertanyaan seperti dahulu. Output adalah:
Indeks kompaun
Akan ada kes apabila pertanyaan menggunakan lebih daripada satu bidang. Dalam kes sedemikian, kita boleh menggunakan indeks kompaun. Pertimbangkan pertanyaan berikut yang menggunakan medan post_type dan post_lik:<span>{ </span> <span>"_id": <span>ObjectId</span>("5146bb52d852470060001f4"), </span> <span>"comments": { </span> <span>"0": "This is the first comment", </span> <span>"1": "This is the second comment" </span> <span>}, </span> <span>"post_likes": 40, </span> <span>"post_tags": { </span> <span>"0": "MongoDB", </span> <span>"1": "Tutorial", </span> <span>"2": "Indexing" </span> <span>}, </span> <span>"post_text": "Hello Readers!! This is my post text", </span> <span>"post_type": "private", </span> <span>"user_name": "Mark Anthony" </span><span>}</span>Menganalisis pertanyaan ini dengan menjelaskan (), memberikan hasil berikut, yang menunjukkan bahawa pertanyaan menggunakan BasicCursor dan semua 500 dokumen diimbas untuk mendapatkan satu dokumen.
Ini sangat tidak cekap, jadi mari kita gunakan beberapa indeks. Kami boleh menentukan indeks kompaun pada medan post_type dan post_lik seperti berikut:
Menganalisis pertanyaan sekarang memberikan hasil berikut:
field1
- field1, field2
- field1, field2, field3
- Jadi, jika kita telah menentukan indeks {field1, field2, field3}, kita tidak perlu menentukan indeks berasingan {field1} dan {field1, field2}. Walau bagaimanapun, jika kita memerlukan indeks kompaun ini semasa pertanyaan Field2 dan Field2, Field3, kita boleh menggunakan petunjuk () jika pengoptimum tidak memilih indeks yang dikehendaki. Kaedah petunjuk () boleh digunakan untuk memaksa MongoDB untuk menggunakan indeks yang kami tentukan dan mengatasi proses pemilihan lalai dan pengoptimuman pertanyaan. Anda boleh menentukan nama medan yang digunakan dalam indeks sebagai hujah seperti yang ditunjukkan di bawah:
- Ini memastikan pertanyaan menggunakan indeks kompaun yang ditakrifkan pada medan post_type dan post_likes. indeks multikey
<span><span><?php </span></span><span><span>// query to find posts with user_name "Jim Alexandar" </span></span><span><span>$cursor = $collection->find( </span></span><span> <span>array("user_name" => "Jim Alexandar") </span></span><span><span>); </span></span><span><span>// use explain() to get explanation of query indexes </span></span><span><span>var_dump($cursor->explain());</span></span></span>mongoDB
,
tutorial , pengindeksan , dan Jadi pada.Indeks kompaun multikey
Kita boleh membuat indeks kompaun multikey, tetapi dengan batasan yang paling banyak satu bidang dalam indeks boleh menjadi array. Jadi, jika kita mempunyai Field1 sebagai rentetan, dan [Field2, Field3] sebagai array, kita tidak dapat menentukan indeks {field2, field3} kerana kedua -dua bidang adalah tatasusunan. Dalam contoh di bawah, kami membuat indeks pada medan post_tags dan user_name:
Adalah penting untuk mengetahui bahawa pengindeksan tidak boleh digunakan dalam pertanyaan yang menggunakan ungkapan biasa, pengendali penolakan (iaitu $ ne, $ tidak, dll), pengendali aritmetik (iaitu $ mod, dll.), Ungkapan JavaScript di $ di mana Fasal, dan dalam beberapa kes lain. Operasi pengindeksan juga datang dengan kos mereka sendiri. Setiap indeks menduduki ruang serta menyebabkan overhead tambahan pada setiap memasukkan, mengemas kini, dan memadam operasi pada koleksi. Anda perlu mempertimbangkan nisbah baca: tulis untuk setiap koleksi; Pengindeksan memberi manfaat kepada koleksi baca-berat, tetapi mungkin bukan untuk koleksi bertulis-berat. MongoDB menyimpan indeks dalam RAM. Pastikan saiz indeks keseluruhan tidak melebihi had RAM. Sekiranya ia berlaku, beberapa indeks akan dikeluarkan dari RAM dan oleh itu pertanyaan akan melambatkan. Juga, koleksi boleh mempunyai maksimum 64 indeks.
RingkasanItu sahaja untuk bahagian ini. Untuk meringkaskan, indeks sangat bermanfaat untuk aplikasi jika pendekatan pengindeksan yang betul dipilih. Di bahagian seterusnya, kami akan melihat menggunakan indeks pada dokumen tertanam, sub-dokumen, dan pesanan. Tinggal!
imej melalui Fotolia soalan yang sering ditanya mengenai pengindeksan mongoDBApakah kepentingan pengindeksan MongoDB dalam pengurusan pangkalan data? Ia secara signifikan meningkatkan prestasi operasi pangkalan data dengan menyediakan laluan yang lebih efisien kepada data. Tanpa indeks, MongoDB mesti melakukan imbasan koleksi, iaitu, mengimbas setiap dokumen dalam koleksi, untuk memilih dokumen -dokumen yang sepadan dengan pernyataan pertanyaan. Dengan indeks, MongoDB boleh mengehadkan pencariannya ke bahagian data yang berkaitan, dengan itu mengurangkan jumlah data yang diperlukan untuk mengimbas. Ini menghasilkan masa tindak balas pertanyaan yang lebih cepat dan penggunaan CPU yang lebih rendah, yang sangat bermanfaat dalam pangkalan data yang besar.
Bagaimanakah pengindeksan MongoDB berfungsi?
Pengindeksan MongoDB berfungsi dengan mewujudkan struktur data khas yang memegang sebahagian kecil daripada data pengumpulan. Struktur data ini merangkumi nilai medan tertentu atau set medan, yang diperintahkan oleh nilai medan seperti yang dinyatakan dalam indeks. Apabila pertanyaan dilaksanakan, MongoDB menggunakan indeks ini untuk mengehadkan bilangan dokumen yang mesti diperiksa. Indeks sangat bermanfaat apabila jumlah saiz dokumen melebihi RAM yang ada. prestasi pertanyaan anda. Ini termasuk medan tunggal, kompaun, multikey, teks, 2D, dan indeks 2dsphere. Setiap jenis indeks berfungsi dengan tujuan tertentu dan digunakan untuk pelbagai jenis pertanyaan. Sebagai contoh, medan tunggal dan indeks kompaun digunakan untuk pertanyaan pada medan tunggal atau berganda. Indeks multikey digunakan untuk tatasusunan, dan indeks teks digunakan untuk kandungan rentetan.
Anda boleh menyemak sama ada indeks wujud dalam mongoDB menggunakan kaedah getIndexes (). Kaedah ini mengembalikan senarai semua indeks pada koleksi, termasuk indeks _id yang dibuat secara lalai. MongoDB menggunakan kaedah dropIndex (). Kaedah ini menghilangkan indeks yang ditentukan dari koleksi. . Ini boleh menjadi sangat berguna apabila tidak ada indeks tunggal yang dapat memenuhi pertanyaan, tetapi persimpangan dua atau lebih indeks boleh.
Apakah kesan pengindeksan pada operasi menulis di MongoDB? Ini kerana setiap kali dokumen dimasukkan atau dikemas kini, semua indeks pada koleksi juga mesti dikemas kini. Oleh itu, lebih banyak indeks koleksi mempunyai, semakin perlahan operasi menulis. Adalah penting untuk mencari keseimbangan antara prestasi membaca dan menulis prestasi semasa membuat indeks.
Atas ialah kandungan terperinci PHP Master | Pengindeksan MongoDB, Bahagian 1. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

URL panjang, sering berantakan dengan kata kunci dan parameter penjejakan, boleh menghalang pelawat. Skrip pemendekan URL menawarkan penyelesaian, mewujudkan pautan ringkas yang sesuai untuk media sosial dan platform lain. Skrip ini sangat berharga untuk laman web individu a

Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Ini adalah bahagian kedua dan terakhir siri untuk membina aplikasi React dengan back-end Laravel. Di bahagian pertama siri ini, kami mencipta API RESTful menggunakan Laravel untuk aplikasi penyenaraian produk asas. Dalam tutorial ini, kita akan menjadi dev

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Tinjauan Landskap PHP 2025 menyiasat trend pembangunan PHP semasa. Ia meneroka penggunaan rangka kerja, kaedah penempatan, dan cabaran, yang bertujuan memberi gambaran kepada pemaju dan perniagaan. Tinjauan ini menjangkakan pertumbuhan dalam PHP Versio moden

Dalam artikel ini, kami akan meneroka sistem pemberitahuan dalam rangka kerja web Laravel. Sistem pemberitahuan di Laravel membolehkan anda menghantar pemberitahuan kepada pengguna melalui saluran yang berbeza. Hari ini, kami akan membincangkan bagaimana anda boleh menghantar pemberitahuan ov


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
