2010-08-31 53 views
9

我做我的MS SQL 2008數據庫的索引報告(右鍵數據庫 - >報告 - >索引使用統計)當保持索引 - 分析在SQL Server索引的使用統計中2008

它告訴我我的指標之一用途: 88用戶尋求 0用戶掃描 6134141用戶更新

有人能向我解釋:

  1. 什麼用戶之間的區別尋求和用戶掃描是?
  2. 我該如何確定何時保留索引或取決於用戶尋求+用戶掃描還是用戶更新?

我認爲在這種情況下維護索引的成本是不值得的。

回答

2

最重要的一點需要注意:每次啓動數據庫時,索引使用統計信息都會重置。所以,很難在不知道上次重新啓動的情況下評估您的88次搜索。在過去一個小時內,88個尋求與上個月的88個尋求完全不同。

  1. 用戶seek正在查找索引中與查詢條件匹配的特定行或一組行。用戶掃描正在讀取索引中的所有行。出於顯而易見的原因,尋找操作優於掃描操作。
  2. 我不知道任何一般指導原則都會說「當查找/更新比率爲X時,放棄索引。」根據這些General Design Guidelines以及您的查詢執行前後的基準來查看索引,以確定刪除索引的影響。
7
  1. Here is a good article這 越過尋求和掃描(和索引一般)。它會 可能比SO 的帖子做得更好。
  2. 它可以是一種藝術形式 確定您是否需要 索引或不。如果這88個尋求 採取絕對必要的報告 查詢從運行時間3小時 下降到30秒,然後保持它們。我認爲第一步是找出哪些查詢正在使用它們,索引有多少幫助這些查詢以及這些查詢有多重要。

Snipit從文章(絕對不妨一讀,雖然):

掃描

索引掃描是所有索引的葉級頁的完整讀取。當索引掃描在聚簇索引上完成時,它是除了名字外的所有表掃描。

當索引掃描由查詢處理器完成時,無論是否返回所有行,它始終是索引中所有葉頁的完整讀取。它從來不是局部掃描。

掃描不僅涉及讀取索引的葉級別,更高級別的頁面也會作爲索引掃描的一部分讀取。

尋求

索引查找是其中SQL使用B樹結構來定位任一特定的值或範圍的值的開頭的操作。爲了使索引成爲可能,必須在查詢中指定一個SARGable3謂詞和一個匹配(或部分匹配)的索引。匹配索引是查詢謂詞使用索引列的左側子集的索引。這將在本系列的第3部分中進行更詳細的檢查。

從根頁面開始評估查找操作。使用根頁面中的行,查詢處理器將定位索引下一個較低級別中的哪個頁面包含正在搜索的第一行。然後它將讀取該頁面。如果這是索引的葉級別,則查找在那裏結束。如果它不是葉子,則查詢處理器再次識別下一個較低級別的哪個頁面包含指定的值。這個過程一直持續到葉級達到。

一旦查詢處理器找到包含指定鍵值或指定鍵值範圍的開始的葉頁面,則它將沿葉頁讀取,直到返回了與謂詞匹配的所有行。