Untuk menerapkan rekomendasi yang membantu Anda menemukan nilai optimal num_leaves dan num_leaves_to_search untuk set data Anda,
ikuti langkah-langkah yang direkomendasikan berikut:
Untuk membuat indeks ScaNN yang dioptimalkan untuk kasus berikut, tetapkan parameter num_leaves ke nilai berikut, dengan rows adalah jumlah baris dalam tabel yang diindeks:
waktu dan kualitas pembuatan indeks yang seimbang menetapkan num_leaves ke sqrt(rows).
kualitas menetapkan num_leaves ke rows/100.
Jalankan kueri pengujian, dengan meningkatkan nilai scann.num_of_leaves_to_search, hingga Anda mencapai rentang perolehan target–misalnya, 95%. Untuk mengetahui informasi selengkapnya tentang cara menganalisis kueri, lihat Menganalisis kueri.
Catat rasio antara scann.num_leaves_to_search dan num_leaves yang akan digunakan pada langkah-langkah berikutnya. Rasio ini memberikan perkiraan di sekitar set data yang akan membantu Anda mencapai target perolehan.
Jika Anda bekerja dengan vektor dimensi tinggi (500 dimensi atau lebih) dan ingin meningkatkan perolehan, coba sesuaikan nilai scann.pre_reordering_num_neighbors. Nilai default ditetapkan ke nilai 500 * K dengan K adalah batas yang Anda tetapkan dalam kueri.
Jika QPS Anda terlalu rendah setelah kueri Anda mencapai perolehan target, ikuti langkah-langkah berikut:
Buat ulang indeks, dengan meningkatkan nilai num_leaves dan scann.num_leaves_to_search sesuai dengan panduan berikut:
Tetapkan num_leaves ke faktor yang lebih besar dari akar kuadrat jumlah baris Anda. Misalnya, jika indeks memiliki num_leaves yang ditetapkan ke akar kuadrat jumlah baris, coba tetapkan ke dua kali akar kuadrat. Jika nilai
sudah ganda, coba tetapkan ke tiga kali akar kuadrat.
Tingkatkan scann.num_leaves_to_search sesuai kebutuhan untuk mempertahankan rasionya dengan num_leaves,
yang Anda catat di Langkah 3.
Tetapkan num_leaves ke nilai yang kurang dari atau sama dengan jumlah baris dibagi 100.
Jalankan kueri pengujian lagi.
Saat Anda menjalankan kueri pengujian, lakukan eksperimen dengan mengurangi scann.num_leaves_to_search, temukan nilai yang meningkatkan QPS sekaligus mempertahankan perolehan yang tinggi. Coba nilai scann.num_leaves_to_search yang berbeda
tanpa membangun ulang indeks.
Ulangi Langkah 4 hingga QPS dan rentang perolehan mencapai nilai yang dapat diterima.
Indeks hierarki tiga tingkat
Selain rekomendasi untuk indeks ScaNN pohon dua tingkat, gunakan panduan berikut.
Untuk menerapkan rekomendasi guna menemukan nilai optimal parameter indeks num_leaves dan max_num_levels, ikuti langkah-langkah berikut:
Buat indeks ScaNN dengan kombinasi num_leaves dan max_num_levels berikut berdasarkan sasaran performa Anda:
menyeimbangkan waktu & kualitas pembuatan indeks: Tetapkan max_num_levels sebagai 2 dan num_leaves sebagai power(rows, ⅔).
Mengoptimalkan kualitas: Tetapkan max_num_levels sebagai 2 dan num_leaves sebagai rows/100.
Jalankan kueri pengujian Anda. Untuk mengetahui informasi selengkapnya tentang menganalisis kueri, lihat Menganalisis kueri.
Catat rasio antara scann.num_leaves_to_search dan num_leaves yang akan digunakan pada langkah-langkah berikutnya. Rasio ini memberikan perkiraan di sekitar set data yang akan membantu Anda mencapai target perolehan.
Jika Anda bekerja dengan vektor dimensi tinggi (500 dimensi atau lebih tinggi) dan ingin meningkatkan perolehan, coba sesuaikan nilai scann.pre_reordering_num_neighbors. Nilai default ditetapkan ke nilai 500 * K dengan K adalah batas yang Anda tetapkan dalam kueri.
Jika QPS Anda terlalu rendah setelah kueri Anda mencapai target perolehan, ikuti langkah-langkah berikut:
Buat ulang indeks, dengan meningkatkan nilai num_leaves dan scann.num_leaves_to_search sesuai dengan panduan berikut:
Tetapkan num_leaves ke faktor power(rows, ⅔) yang lebih besar. Misalnya, jika indeks memiliki num_leaves yang ditetapkan ke power(rows, ⅔), coba tetapkan ke dua kali lipat power(rows, ⅔). Jika nilainya sudah dua kali lipat, coba tetapkan menjadi tiga kali lipat power(rows, ⅔).
Tingkatkan scann.num_leaves_to_search sesuai kebutuhan untuk mempertahankan rasionya dengan num_leaves, yang Anda catat di Langkah 3.
Tetapkan num_leaves ke nilai yang kurang dari atau sama dengan rows/100.
Jalankan kueri pengujian lagi. Saat Anda menjalankan kueri pengujian, lakukan eksperimen dengan mengurangi scann.num_leaves_to_search, temukan nilai yang meningkatkan QPS sekaligus mempertahankan perolehan yang tinggi. Coba nilai scann.num_leaves_to_search yang berbeda tanpa membangun kembali indeks.
Ulangi Langkah 4 hingga QPS dan rentang perolehan mencapai nilai yang dapat diterima.
Pemeliharaan indeks
Jika tabel Anda sering diperbarui atau disisipkan, sebaiknya indeks ulang ScaNN yang ada secara berkala untuk meningkatkan akurasi perolehan.
Anda dapat memantau metrik indeks untuk melihat perubahan pada distribusi vektor atau mutasi vektor sejak indeks dibuat, lalu mengindeks ulang sesuai kebutuhan. Untuk mengetahui informasi selengkapnya tentang metrik, lihat Metrik indeks vektor.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Sulit dipahami","hardToUnderstand","thumb-down"],["Informasi atau kode contoh salah","incorrectInformationOrSampleCode","thumb-down"],["Informasi/contoh yang saya butuhkan tidak ada","missingTheInformationSamplesINeed","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-09-04 UTC."],[],[],null,["# Best practices for tuning ScaNN indexes\n\nSelect a documentation version: 16.8.0keyboard_arrow_down\n\n- [Current (16.8.0)](/alloydb/omni/current/docs/ai/best-practices-tuning-scann)\n- [16.8.0](/alloydb/omni/16.8.0/docs/ai/best-practices-tuning-scann)\n- [16.3.0](/alloydb/omni/16.3.0/docs/ai/best-practices-tuning-scann)\n- [15.12.0](/alloydb/omni/15.12.0/docs/ai/best-practices-tuning-scann)\n- [15.7.1](/alloydb/omni/15.7.1/docs/ai/best-practices-tuning-scann)\n- [15.7.0](/alloydb/omni/15.7.0/docs/ai/best-practices-tuning-scann)\n\n\u003cbr /\u003e\n\nThis page provides recommendations about how to tune AlloyDB Omni index parameters for optimal balance between recall and QPS. The recommended parameters for the Scalable Nearest Neighbor (ScaNN) index differ depending on whether you choose to build a two-level or a three-level tree index.\n\n\u003cbr /\u003e\n\nScaNN index creation\n--------------------\n\nFor more information, see the [ScaNN Index reference](/alloydb/omni/16.8.0/docs/reference/scann-index-reference).\n\n### Two-level tree index\n\nTo apply recommendations to help you find the optimal values of `num_leaves` and `num_leaves_to_search` for your dataset,\nfollow these recommended steps:\n\n1. To create the `ScaNN` index optimized for the following cases set the `num_leaves` parameter to the following value, where rows is the number of rows in the indexed table:\n - **balanced index build time and quality** set `num_leaves` to `sqrt(rows)`.\n - **quality** set num_leaves to rows/100.\n2. Run your test queries, increasing the value of `scann.num_of_leaves_to_search`, until you achieve your target recall range--for example, 95%. For more information about analyzing your queries, see [Analyze your queries](/alloydb/omni/16.8.0/docs/ai/tune-indexes?resource=scann#explain-analyze).\n3. Take note of the ratio between `scann.num_leaves_to_search` and `num_leaves` that will be used in subsequent steps. This ratio provides an approximation around the dataset that will help you achieve your target recall. \n\n If you are working with high dimension vectors (500 dimensions or higher) and want to improve recall, then try tuning the value of `scann.pre_reordering_num_neighbors`. The default value is set to the value `500 * K` where `K` is the limit that you set in your query.\n4. If your QPS is too low after your queries achieve a target recall, then follow these steps:\n 1. Recreate the index, increasing the value of `num_leaves` and `scann.num_leaves_to_search` according to the following guidance:\n - Set `num_leaves` to a larger factor of the square root of your row count. For example, if the index has `num_leaves` set to the square root of your row count, try setting it to double the square root. If the value is already double, then try setting it to triple the square root.\n - Increase `scann.num_leaves_to_search` as needed to maintain its ratio with `num_leaves`, which you noted in Step 3.\n - Set `num_leaves` to a value less than or equal to the row count divided by 100.\n 2. Run the test queries again. While you're running the test queries, experiment with reducing `scann.num_leaves_to_search`, finding a value that increases QPS while keeping your recall high. Try different values of `scann.num_leaves_to_search` without rebuilding the index.\n5. Repeat Step 4 until both the QPS and the recall range have reached acceptable values.\n\n### Three-level tree index\n\nIn addition to the recommendations for the two-level tree `ScaNN` index, use the following guidance.\n\nTo apply recommendations to find the optimal value of `num_leaves` and `max_num_levels` index parameters, follow these steps:\n\n1. Create the `ScaNN` index with the following `num_leaves` and `max_num_levels` combinations based on your performance goals:\n\n - **balance index build time \\& quality** : Set `max_num_levels` as `2` and `num_leaves` as `power(rows, ⅔)`.\n - **optimize for quality** : Set `max_num_levels` as `2` and `num_leaves` as `rows/100`.\n2. Run your test queries. For more information about analyzing queries, see [Analyze your queries](/alloydb/omni/16.8.0/docs/ai/tune-indexes?resource=scann#explain-analyze).\n\n3. Take note of the ratio between `scann.num_leaves_to_search` and `num_leaves` that will be used in subsequent steps. This ratio provides an approximation around the dataset that will help you achieve your target recall.\n\nIf you are working with high dimension vectors (500 dimensions or higher) and want to improve recall, then try tuning the value of `scann.pre_reordering_num_neighbors`. The default value is set to the value `500 * K` where `K` is the limit that you set in your query.\n\n1. If your QPS is too low after your queries achieve a target recall, then follow these steps:\n\n - Recreate the index, increasing the value of `num_leaves` and `scann.num_leaves_to_search` according to the following guidance:\n - Set `num_leaves` to a larger factor of the `power(rows, ⅔)`. For example, if the index has `num_leaves` set to the `power(rows, ⅔)`, try setting it to double the `power(rows, ⅔)`. If the value is already double, then try setting it to triple the `power(rows, ⅔)`.\n - Increase `scann.num_leaves_to_search` as needed to maintain its ratio with `num_leaves`, which you noted in Step 3.\n - Set `num_leaves` to a value less than or equal to `rows/100`.\n - Run the test queries again. While you're running the test queries, experiment with reducing `scann.num_leaves_to_search`, finding a value that increases QPS while keeping your recall high. Try different values of `scann.num_leaves_to_search` without rebuilding the index.\n2. Repeat Step 4 until both the QPS and the recall range have reached acceptable values.\n\nIndex maintenance\n-----------------\n\nIf your table is prone to frequent updates or insertions, then we recommend periodically reindexing the existing `ScaNN` index in order to improve the recall accuracy.\nYou can monitor index metrics to view changes in vector distributions or vector mutations since the index was built, and then reindex accordingly. For more information about metrics, see [Vector index metrics](/alloydb/omni/16.8.0/docs/reference/vector-index-metrics).\n\nWhat's next\n-----------\n\n- [Get started with vector embeddings using AlloyDB AI](https://codelabs.developers.google.com/alloydb-ai-embedding#0)."]]