Mengoptimalkan performa kueri
Untuk memecahkan masalah kueri yang lambat, gunakan Query Explain untuk mendapatkan rencana eksekusi kueri dan profil eksekusi runtime. Bagian berikut menjelaskan langkah-langkah yang dapat Anda lakukan untuk mengoptimalkan performa kueri, bergantung pada profil eksekusi:Membatasi jumlah hasil
Gunakan kolom yang ditampilkan di pohon eksekusi untuk
mengidentifikasi apakah kueri menampilkan banyak dokumen. Pertimbangkan untuk membatasi jumlah dokumen yang ditampilkan dengan menggunakan klausa $limit
. Hal ini mengurangi ukuran byte yang diserialisasi dari hasil saat ditampilkan ke
klien melalui jaringan. Jika
node Limit
didahului oleh node MajorSort
, mesin kueri dapat
menggabungkan node Limit
dan MajorSort
serta mengganti materialisasi dan pengurutan dalam memori penuh dengan pengurutan TopN, sehingga mengurangi persyaratan memori untuk
kueri.
Membatasi Ukuran Dokumen Hasil
Pertimbangkan untuk membatasi ukuran dokumen yang ditampilkan dengan menggunakan klausa $project
untuk menghindari pengambilan kolom yang tidak diperlukan. Hal ini membantu mengurangi biaya komputasi dan memori untuk memproses hasil sementara dan ukuran byte hasil yang diserialkan saat dikembalikan ke klien melalui jaringan. Jika semua kolom yang dirujuk dalam kueri tercakup oleh indeks reguler (bukan multikey), hal ini juga memungkinkan kueri tercakup sepenuhnya oleh pemindaian indeks, sehingga tidak perlu mengambil dokumen dari penyimpanan utama.
Menggunakan indeks
Gunakan petunjuk berikut untuk menyiapkan dan mengoptimalkan indeks.
Mengidentifikasi apakah kueri menggunakan indeks
Anda dapat mengidentifikasi apakah kueri menggunakan indeks dengan memeriksa node daun di pohon eksekusi. Jika node daun pohon eksekusi adalah node TableScan, artinya kueri tidak menggunakan indeks dan memindai dokumen dari penyimpanan primer. Jika indeks sedang digunakan, node daun pohon eksekusi akan menampilkan ID indeks dan kolom indeks dari indeks.
Mengidentifikasi apakah indeks yang digunakan dapat dioptimalkan
Indeks berguna untuk kueri jika dapat mengurangi jumlah dokumen yang perlu diambil oleh mesin kueri dari penyimpanan utama atau jika pengurutan kolomnya dapat memenuhi persyaratan Pengurutan kueri.
Jika indeks digunakan untuk kueri, tetapi mesin kueri masih mengambil dan menghapus banyak dokumen, seperti yang diidentifikasi oleh node Pemindaian yang menampilkan banyak rekaman, diikuti dengan node Filter yang menampilkan sedikit rekaman, ini adalah tanda bahwa predikat kueri yang dipenuhi menggunakan indeks tidak selektif. Untuk membuat indeks yang lebih sesuai, lihat Membuat indeks.
Jika indeks non-multikey digunakan untuk kueri, tetapi mesin kueri masih melakukan pengurutan ulang kumpulan hasil dalam memori, seperti yang diidentifikasi oleh node MajorSort di pohon eksekusi kueri, ini adalah tanda bahwa indeks yang digunakan tidak dapat digunakan untuk memenuhi persyaratan Pengurutan kueri. Untuk membuat indeks yang lebih sesuai, lihat bagian berikutnya.
Membuat Indeks
Ikuti dokumentasi pengelolaan indeks untuk membuat indeks. Untuk memastikan kueri Anda dapat menggunakan indeks, buat indeks reguler (bukan Multikey) dengan kolom dalam urutan berikut:
- Semua kolom yang akan digunakan dalam operator kesetaraan. Untuk memaksimalkan peluang penggunaan ulang di seluruh kueri, urutkan kolom dalam urutan menurun dari kemunculan kolom dalam operator kesetaraan di antara kueri.
- Semua kolom yang akan diurutkan (dalam urutan yang sama).
- Kolom yang akan digunakan dalam operator rentang atau ketidaksetaraan dalam urutan menurun selektivitas batasan kueri.
- Kolom yang akan ditampilkan sebagai bagian dari kueri dalam indeks: menyertakan kolom tersebut dalam indeks memungkinkan indeks mencakup kueri dan tidak perlu mengambil dokumen dari penyimpanan utama.
Untuk kueri yang melibatkan pemfilteran dan pengurutan kolom array, pertimbangkan untuk membuat Indeks multikunci.
Menggunakan petunjuk kueri
Jika Anda telah membuat indeks yang lebih sesuai untuk kueri, tetapi mesin kueri tidak menggunakan indeks tersebut, Anda dapat mengganti preferensi indeks mesin kueri dengan menggunakan petunjuk kueri.