盡可能提高查詢效能
如要排解查詢速度緩慢的問題,請使用查詢說明取得查詢執行計畫和執行階段執行設定檔。以下各節說明如何根據執行設定檔,採取適當步驟來提升查詢效能:限制結果數量
使用執行樹狀結構中的「傳回的記錄」欄位,判斷查詢是否傳回大量文件。建議使用 $limit
子句限制傳回的文件數量。這樣一來,透過網路傳回用戶端時,結果的序列化位元組大小就會減少。如果 Limit
節點前面有 MajorSort
節點,查詢引擎可以合併 Limit
和 MajorSort
節點,並以 TopN 排序取代完整的記憶體內具體化和排序,進而減少查詢的記憶體需求。
限制結果文件大小
建議使用 $project
子句限制傳回的文件大小,避免擷取不必要的欄位。這有助於減少處理中繼結果的運算和記憶體成本,以及透過網路傳回用戶端時,結果的序列化位元組大小。如果查詢中參照的所有欄位都包含在一般索引 (非多鍵) 中,查詢也可以完全由索引掃描涵蓋,避免從主要儲存空間擷取文件。
使用索引
請按照下列操作說明設定及最佳化索引。
判斷查詢是否使用索引
您可以檢查執行樹狀結構中的葉節點,判斷查詢是否使用索引。如果執行樹狀結構的葉節點是 TableScan 節點,表示查詢並未使用索引,而是掃描主要儲存空間中的文件。如果使用索引,執行樹狀結構的葉節點會顯示索引的索引 ID 和索引欄位。
判斷使用的索引是否可以最佳化
如果索引可以減少查詢引擎需要從主要儲存空間擷取的檔案數量,或者索引的欄位排序可以滿足查詢的排序需求,索引對查詢就很有用。
如果查詢使用索引,但查詢引擎仍會擷取並捨棄大量文件 (如 Scan 節點傳回大量記錄,接著 Filter 節點傳回少量記錄),這表示使用索引滿足的查詢述詞不具選擇性。如要建立更合適的索引,請參閱「建立索引」。
如果查詢使用非多鍵索引,但查詢引擎仍在執行結果集的記憶體內重排序,如查詢執行樹狀結構中的 MajorSort 節點所示,這表示所用索引無法用於提供查詢的排序需求。如要建立更合適的索引,請參閱下一節。
建立索引
請參閱索引管理說明文件,瞭解如何建立索引。為確保查詢可以使用索引,請依下列順序建立一般 (而非 Multikey) 索引和欄位:
- 所有將用於等號運算子的欄位。如要盡量在查詢中重複使用欄位,請依查詢中等號運算子內欄位的出現次數,以遞減順序排序欄位。
- 所有要排序的欄位 (順序相同)。
- 將在範圍或不相等運算子中使用的欄位,依查詢限制選擇性遞減排序。
- 將做為索引查詢一部分傳回的欄位:在索引中加入這類欄位,可讓索引涵蓋查詢內容,避免必須從主要儲存空間擷取文件。
如果查詢涉及篩選及排序陣列欄位,請考慮建立多鍵索引。
使用查詢提示
如果您已為查詢建立更合適的索引,但查詢引擎並未使用該索引,您可以透過查詢提示,覆寫查詢引擎的索引偏好設定。