盡可能提高查詢效能

如要排解查詢速度緩慢的問題,請使用查詢說明取得查詢執行計畫和執行階段執行設定檔。以下說明如何根據執行設定檔,採取最佳化查詢效能的步驟:

限制結果數量

請使用執行樹狀圖中的「records_returned」欄位,判斷查詢是否傳回多份文件。建議您使用 $limit 子句限制傳回的文件數量。這樣一來,當結果透過網路傳回用戶端時,序列化的位元組大小就會減少。如果 Limit 節點前方有 MajorSort 節點,查詢引擎可以合併 LimitMajorSort 節點,並以 TopN 排序取代完整的記憶體內實作和排序,進而減少查詢的記憶體需求。

限制結果文件大小

建議使用 $project 子句限制傳回文件的大小,以免擷取不必要的欄位。這有助於降低處理中繼結果的運算和記憶體成本,以及透過網路傳回用戶端的結果序列化位元組大小。如果查詢中參照的所有欄位都涵蓋在一般索引 (而非多鍵) 中,這也表示索引掃描作業可完全涵蓋查詢,因此不必從主要儲存空間擷取文件。

使用索引

請按照下列操作說明設定及最佳化索引。

找出查詢是否使用索引

您可以檢查執行樹狀圖中的葉節點,判斷查詢是否使用索引。如果執行樹狀結構的葉節點是 TableScan 節點,表示查詢未使用索引,而是掃描主要儲存空間中的文件。如果使用索引,執行樹狀圖的葉節點會顯示索引的索引 ID 和索引欄位。

找出是否可改善所使用的索引

如果索引可減少查詢引擎需要從主要儲存空間擷取的文件數量,或是其欄位排序可提供查詢的排序需求,那麼索引對查詢就很有幫助。

如果查詢使用索引,但查詢引擎仍會擷取及捨棄許多文件,如同透過傳回許多記錄的掃描節點,以及傳回少數記錄的篩選節點所示,這表示使用索引滿足查詢述詞的做法並非選擇性。如要建立更合適的索引,請參閱「建立索引」。

如果查詢使用非多鍵索引,但查詢引擎仍在執行結果集的記憶體內重新排序作業 (可在查詢執行樹狀圖中透過主要排序節點識別),這表示所用的索引無法用於提供查詢的排序需求。如要建立更合適的索引,請參閱下一節。

建立索引

請按照索引管理說明文件建立索引。為確保查詢可以使用索引,請按照下列順序建立常規 (非多鍵) 索引欄位:

  1. 所有會用於等號運算子的欄位。為了盡可能在各項查詢中重複使用欄位,請依據查詢中相等運算子中出現的欄位,以遞減順序排序欄位。
  2. 所有要排序的欄位 (以相同順序排列)。
  3. 在範圍或不等式運算子中,依查詢限制選擇性遞減順序使用的欄位。
  4. 在索引中以查詢的一部分傳回的欄位:在索引中加入這類欄位,可讓索引涵蓋查詢,避免從主要儲存空間擷取文件。

如果查詢涉及篩選和排序陣列欄位,請考慮建立多鍵索引。

使用查詢提示

如果您已為查詢建立更合適的索引,但查詢引擎未使用該索引,則可以使用查詢提示覆寫查詢引擎的索引偏好設定。