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:

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