本頁面提供 AlloyDB AI 中適應性篩選功能的概念總覽,這項功能旨在最佳化含篩選條件的向量搜尋。
什麼是自動調整篩選?
在查詢執行期間,適應性篩選會分析查詢模式和資料分配情形,動態選擇最有效率的篩選策略,例如內嵌或預先篩選。
AlloyDB AI 查詢最佳化工具會使用以成本為準的分析,判斷在查詢執行期間的任何時間點,內嵌篩選或預先篩選是否能提供最佳效能。
這類最佳化作業支援 AlloyDB AI 的篩選向量搜尋功能,可自動在向量和中繼資料索引之間切換,產生有效率且準確的結果,不需要手動介入。
動態切換篩選策略
在查詢執行期間,適應性篩選功能會根據即時查詢模式和資料分配情形,自動且動態地在內嵌篩選和預先篩選策略之間切換。AlloyDB AI 查詢最佳化工具會使用以成本為準的分析,判斷哪種策略在任何時間點都能提供最佳效能。
從內嵌到預先篩除
如果最佳化工具判斷預先篩選的效率較高,自動調適篩選功能會在執行期間,觸發從內嵌篩選切換至預先篩選。查詢計畫會動態變更,以反映這項異動。
舉例來說,如果最佳化工具判斷在查詢中的該時間點進行預先篩選的效率較高,企劃書的「執行策略」欄位就會顯示 Bitmap assisted pre-filtering。系統會在查詢執行期間適應實際遇到的資料,因此會發生這種動態變化。
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted pre-filtering
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
使用 Execution Strategy: Bitmap assisted pre-filtering 時,Bitmap Index Scan 會先篩選大型資料集,如果預先篩選能有效縮小候選項目範圍,最終的向量相似度搜尋就不會使用向量索引。
從預先篩選到內嵌篩選
如果 AlloyDB AI 查詢最佳化工具判斷內嵌篩選更適合目前的查詢特徵,自適應篩選也會動態從預先篩選切換至內嵌篩選。
在這種情況下,查詢計畫會動態調整,以反映向量資料的更直接處理方式,而向量掃描前不會有明確的預先篩選步驟。因此,當資料分配或查詢參數在執行階段發生變化時,這項功能有助於達到最佳效能。
舉例來說,如果最佳化工具判斷內嵌篩選策略對特定查詢的效率較高,查詢計畫的「執行策略」欄位就會顯示 vector scan。
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted vector Scan on scann_idx
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
Num Requalifications: 0
Num filtered: 1000
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
在本範例中,Execution Strategy 會顯示 Bitmap assisted vector Scan on scann_idx,並在 btree_idx 上顯示底層的 Bitmap Index Scan。這表示向量搜尋使用點陣圖篩選器,而點陣圖索引掃描會根據 int_col <= 100000000 條件產生該篩選器。Custom Scan (vector scan)接著只會處理這個點陣圖識別的資料列,直接將篩選條件整合到向量掃描程序中。
範例:選擇性如何觸發動態切換
系統會根據標準篩選器的選擇性,決定是否採用適應性篩選器。如果篩選器會排除大量資料,最佳化工具可能會選擇預先篩選。如果篩選器保留大部分資料,最佳化工具可能會選擇內嵌篩選。
您可以執行相同的查詢並調整 WHERE 子句的選擇性,即時觀察這項動態切換。
舉例來說,查詢大型零售產品資料表時,您可能只想對特定價格以下的項目執行向量搜尋。
低選擇性
首先,搜尋價格低於 $1,000 美元的產品。由於資料庫中幾乎所有產品的價格都低於 $1,000 美元,因此篩選器的選擇性較低。AlloyDB AI 查詢最佳化工具判斷,將幾乎整個資料庫收集到預先篩選的清單中效率不彰,因此會執行內嵌向量掃描。
查看查詢計畫時,您會發現系統動態調整了巨量資料集,並選擇內嵌篩選。
Limit (actual rows=10)
-> Custom Scan (vector scan)
Execution Strategy: Bitmap assisted vector Scan on scann_idx
Order By: (vec <=> '[...]'::vector)
-> Bitmap Index Scan
Index Cond: (price <= 1000)
高選擇性
接著,您將查詢改為搜尋價格低於 $10 美元的產品。查詢開始執行時,AlloyDB AI 查詢最佳化工具會先準備使用內嵌篩選功能。規劃工具誤以為篩選條件不具選擇性。 由於用來做出這些預估的統計資料不一定準確或最新,因此實際情況與預估結果不符的情況比預期更常發生。不過,系統很快就判斷出價格篩選器的選擇性很高,因為資料庫中價格這麼低的項目很少。最佳化工具判斷,在執行向量掃描前收集這幾列資料會快得多,因此動態切換策略為預先篩選。
查詢計畫會反映這項即時樞紐。系統選擇先預先篩選小型資料集,再掃描向量。
規劃師的初始選擇
Limit (actual rows=10)
-> Custom Scan (vector scan)
Execution Strategy: Bitmap assisted vector Scan on scann_idx
Order By: (vec <=> '[...]'::vector)
-> Bitmap Index Scan
Index Cond: (price <= 10)
實際執行 (自動切換)
Limit (actual rows=10)
-> Custom Scan (vector scan)
Execution Strategy: Bitmap assisted pre-filtering
Order By: (vec <=> '[...]'::vector)
-> Bitmap Index Scan
Index Cond: (price <= 10)
隨著資料分配情形隨時間變化,您不需要重寫應用程式程式碼或手動更新資料庫索引。AlloyDB AI 會在每次查詢時為您處理路由邏輯,確保效能。