Tutorial MongoD...login
Tutorial MongoDB
pengarang:php.cn  masa kemas kini:2022-04-21 17:49:03

Analisis pertanyaan MongoDB


Analisis pertanyaan MongoDB boleh memastikan sama ada indeks cadangan kami berkesan dan merupakan alat penting untuk analisis prestasi pernyataan pertanyaan.

Fungsi yang biasa digunakan untuk analisis pertanyaan MongoDB ialah: explain() dan hint().


Gunakan explain()

Operasi explain menyediakan maklumat pertanyaan, indeks penggunaan dan statistik pertanyaan, dsb. Ia berguna untuk kami mengoptimumkan indeks.

Seterusnya kami membuat indeks untuk jantina dan nama_pengguna dalam koleksi pengguna:

>db.users.ensureIndex({gender:1,user_name:1})
</p>
<p>现在在查询语句中使用 explain :</p>
<pre>
>db.users.find({gender:"M"},{user_name:1,_id:0}).explain()

Pertanyaan explain() di atas mengembalikan hasil berikut:

{
   "cursor" : "BtreeCursor gender_1_user_name_1",
   "isMultiKey" : false,
   "n" : 1,
   "nscannedObjects" : 0,
   "nscanned" : 1,
   "nscannedObjectsAllPlans" : 0,
   "nscannedAllPlans" : 1,
   "scanAndOrder" : false,
   "indexOnly" : true,
   "nYields" : 0,
   "nChunkSkips" : 0,
   "millis" : 0,
   "indexBounds" : {
      "gender" : [
         [
            "M",
            "M"
         ]
      ],
      "user_name" : [
         [
            {
               "$minElement" : 1
            },
            {
               "$maxElement" : 1
            }
         ]
      ]
   }
}

Sekarang, mari kita lihat di Medan ini set hasil:

  • indeksSahaja: Medan adalah benar, menunjukkan bahawa kami menggunakan indeks.

  • kursor: Kerana pertanyaan ini menggunakan indeks, dan indeks dalam MongoDB disimpan dalam struktur B-tree, jadi ini juga menggunakan kursor jenis BtreeCursor . Jika tiada indeks digunakan, jenis kursor ialah BasicCursor. Kunci ini juga akan memberi anda nama indeks yang anda gunakan Melalui nama ini, anda boleh melihat koleksi system.indexes di bawah pangkalan data semasa (sistem menciptanya secara automatik, kerana ia menyimpan maklumat indeks, ini akan disebut kemudian). untuk mendapatkan maklumat terperinci indeks.

  • n: Bilangan dokumen yang dikembalikan oleh pertanyaan semasa.

  • nscanned/nscannedObjects: Menunjukkan bilangan dokumen dalam koleksi yang telah diimbas oleh pertanyaan semasa Matlamat kami adalah untuk menjadikan nilai ini lebih konsisten dengan bilangan dokumen yang dikembalikan.

  • milis: Masa yang diperlukan untuk pertanyaan semasa, dalam milisaat.

  • indexBounds: Indeks yang digunakan secara khusus oleh pertanyaan semasa.


Menggunakan hint()

Walaupun pengoptimum pertanyaan MongoDB secara amnya berfungsi dengan baik, anda juga boleh menggunakan pembayang untuk memaksa MongoDB menggunakan indeks tertentu.

Kaedah ini akan meningkatkan prestasi dalam beberapa kes. Ambil koleksi yang diindeks dan lakukan pertanyaan berbilang medan (beberapa medan sudah diindeks).

Contoh pertanyaan berikut menentukan penggunaan medan indeks jantina dan nama_pengguna untuk membuat pertanyaan:

>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})

Anda boleh menggunakan fungsi explain() untuk menganalisis pertanyaan di atas:

>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()

Laman web PHP Cina