1. 程式人生 > >15W翻譯

15W翻譯

統計
   SQL Server查詢優化器在為查詢選擇執行計劃時使用基於成本的模型。 它估算不同執行計劃的成本,並選擇成本最低的計劃。 但請記住,SQL Server不會搜尋可用於查詢的最佳執行計劃,因為評估所有可能的替代方案在CPU方面既耗時又昂貴。 查詢優化器的目標是找到足夠快的執行計劃。

   基數估計(在查詢執行的每個步驟中需要處理的行數的估計)是查詢優化中最重要的因素之一。 此數字會影響連線策略的選擇,查詢執行所需的記憶體量(記憶體授權)以及其他一些事項。

    訪問資料時使用的索引選擇屬於這些因素。 您會記得,在I / O方面,金鑰和RID查詢操作很昂貴,並且當SQL Server估計需要大量這些操作時,它們不使用非聚簇索引。 SQL Server維護索引的統計資訊 - 在某些情況下還包括列 - 這有助於執行此類估計。

SQL Server統計資訊簡介
    SQL Server統計資訊是系統物件,其中包含有關索引鍵值中的資料分佈的資訊,有時還包含常規列值。 可以在支援比較操作的任何資料型別上建立統計資訊,例如>,<,=等。

    讓我們從上一章清單2-15中建立的dbo.Books表中檢查IDX_BOOKS_ISBN索引統計資訊。 您可以使用DBCC SHOW_STATISTICS('dbo.Books',IDX_BOOKS_ISBN)命令來完成此操作。 結果如圖3-1所示。

  圖片

圖3-1:DBCC SHOW_STATISTICS輸出

    如您所見,DBCC SHOW_STATISTICS命令返回三個結果集。 第一個包含有關統計資訊的常規元資料資訊,例如名稱,更新日期,更新統計資訊時索引中的行數等。 第一個結果集中的“步驟”列指示直方圖中的步數/值的數量(稍後將詳細介紹)。 查詢優化程式不使用“密度”值,僅出於向後相容性目的而顯示。

    第二個結果集稱為密度向量,它包含有關統計(索引)中鍵值組合的密度的資訊。 它是基於1 /不同值公式計算的,它表示每個鍵值組合平均有多少行。 儘管IDX_Books_ISBN索引只定義了一個鍵列ISBN,但它還包含一個聚簇索引鍵作為索引行的一部分。 我們的表有1,252,500個唯一的ISBN值,ISBN列的密度為1.0 / 1,252,500 = 7.984032E-07。 (ISBN,BookId)列的所有組合也是唯一的並且具有相同的密度。

    最後的結果集稱為直方圖。 直方圖中的每個記錄(稱為直方圖步驟)都包括統計資訊(索引)最左列中的樣本鍵值以及有關從前一個值到當前RANGE_HI_KEY值的值範圍內的資料分佈的資訊。 讓我們更深入地檢查直方圖列。

      RANGE_HI_KEY列儲存金鑰的樣本值。 此值是直方圖步驟定義的範圍的上限鍵值。 例如,在圖3-1的直方圖中記錄(步驟)#3,其中RANGE_HI_KEY ='104-0100002488'儲存有關從ISBN>'101-0100001796'到ISBN <='104-0100002488'的間隔的資訊。

    RANGE_ROWS列估計間隔內的行數。 在我們的例子中,記錄(步驟)#3定義的間隔有8,191行。

   EQ_ROWS表示有多少行的鍵值等於RANGE_HI_KEYupper繫結值。 在我們的例子中,只有一行ISBN ='104-0100002488'。

  DISTINCT_RANGE_ROWS表示金鑰在區間內有多少個不同的值。 在我們的示例中,鍵的所有值都是唯一的,因此DISTINCT_RANGE_ROWS = RANGE_ROWS。