Mengoptimalkan performa kueri
Untuk memecahkan masalah kueri 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 data yang ditampilkan di hierarki eksekusi untuk
mengidentifikasi apakah kueri menampilkan banyak dokumen. Pertimbangkan untuk membatasi jumlah dokumen yang ditampilkan menggunakan klausa $limit
. Hal ini mengurangi ukuran byte serialisasi 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 penuh dalam memori dan pengurutan dengan pengurutan TopN, sehingga mengurangi persyaratan memori untuk kueri.
Membatasi Ukuran Dokumen Hasil
Pertimbangkan untuk membatasi ukuran dokumen yang ditampilkan menggunakan klausa $project
untuk menghindari pengambilan kolom yang tidak diperlukan. Hal ini membantu mengurangi biaya komputasi dan memori untuk memproses
hasil perantara dan ukuran byte serialisasi hasil saat ditampilkan
ke klien melalui jaringan. Jika semua kolom yang dirujuk dalam kueri tercakup oleh indeks reguler (bukan multikunci), 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 hierarki eksekusi. Jika node daun dari hierarki eksekusi adalah node TableScan, artinya kueri tidak menggunakan indeks dan memindai dokumen dari penyimpanan utama. Jika indeks sedang digunakan, node daun hierarki 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 mesin kueri dari penyimpanan utama atau jika pengurutan kolomnya dapat memenuhi persyaratan Urutkan kueri.
Jika indeks digunakan untuk kueri, tetapi mesin kueri masih mengambil dan membuang banyak dokumen, seperti yang diidentifikasi oleh node Pindai yang menampilkan banyak kumpulan data, diikuti dengan node Filter yang menampilkan sedikit kumpulan data, ini adalah tanda bahwa prediket kueri yang dipenuhi menggunakan indeks tidak selektif. Untuk membuat indeks yang lebih cocok, lihat Membuat indeks.
Jika indeks non-multikunci digunakan untuk kueri, tetapi mesin kueri masih melakukan pengurutan ulang kumpulan hasil dalam memori, seperti yang diidentifikasi oleh node MajorSort dalam hierarki eksekusi kueri, ini adalah tanda bahwa indeks yang digunakan tidak dapat digunakan untuk memenuhi persyaratan Pengurutan kueri. Untuk membuat indeks yang lebih cocok, lihat bagian berikutnya.
Membuat Indeks
Ikuti dokumentasi pengelolaan indeks untuk membuat indeks. Untuk memastikan kueri Anda dapat menggunakan indeks, buat indeks reguler (bukan Multikunci) dengan kolom dalam urutan berikut:
- Semua kolom yang akan digunakan dalam operator kesetaraan. Untuk memaksimalkan peluang penggunaan kembali di seluruh kueri, urutkan kolom dalam urutan menurun kemunculan kolom dalam operator persamaan di antara kueri.
- Semua kolom yang akan diurutkan (dalam urutan yang sama).
- Kolom yang akan digunakan dalam operator rentang atau ketidaksetaraan dalam urutan menurun dari selektivitas batasan kueri.
- Kolom yang akan ditampilkan sebagai bagian dari kueri dalam indeks: menyertakan kolom tersebut dalam indeks memungkinkan indeks mencakup kueri dan menghindari pengambilan 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 menggunakan petunjuk kueri.