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:

  1. 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.
  2. Semua kolom yang akan diurutkan (dalam urutan yang sama).
  3. Kolom yang akan digunakan dalam operator rentang atau ketidaksetaraan dalam urutan menurun selektivitas batasan kueri.
  4. 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.