資源描述:
《理解sql server的sql查詢計劃--》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、理解SQLServer的SQL查詢計劃>> 本文通過詳細(xì)分析一個示例來說明SEEK、SCAN等操作的用法和效果,供大家參考! 入門指南 讓我們以一個簡單的例子幫助你理解如何閱讀查詢計劃,可以通過發(fā)出SETSHObig_salesSELECTord_dateFROMbig_salesStmtText-------------------------------------------------------------------------
2、--ClusteredIndexScan(OBJECT:([pubs].[dbo
3、].[big_sales].[UPKCL_big_sales])) 上面的查詢展示返回的數(shù)據(jù)量非常不同,所以小結(jié)果集(ord_date)的查詢比其它查詢運行更快,這只是因為存在大量底層的I/O。然而,這兩個查詢計劃實際上是一樣的。你可以通過使用其它索引提高性能。例如,在title_id列上有一個非聚集索引存在:SELECTtitle_idFROMbig_salesStmtText------------------------------------------------------------------
4、--Index
5、Scan(OBJECT:([pubs].[dbo].[big_sales].[ndx_sales_ttlID])) 上面的查詢的執(zhí)行時間與SELECT*查詢相比非常小,這是因為可以從非聚集索引即可得到所有結(jié)果。該類查詢被稱為coveringquery(覆蓋查詢),因為全部結(jié)果集被一個非聚集索引所覆蓋?! EEK與SCAN 第一件事是你需要在查詢計劃中區(qū)別SEEK和SCAN操作的不同?! ∽⒁猓阂粋€簡單但非常有用的規(guī)則是SEEK操作是有效率的,而SCAN操作即使不是非常差,其效率也不是很好。SEEK操作是直接的,或者至少是
6、快速的,而SCAN操作需要對整個對象進行讀取(表,聚集索引或非聚集索引)。因此,SCAN操作通常比SEEK要消耗更多的資源。如果你的查詢計劃僅是掃描操作,你就應(yīng)該考慮調(diào)整你的查詢了?! ig_salestText-----------------------------------------------------------------------------
7、--ClusteredIndexSeek(OBJECT:([pubs].[dbo].[big_sales].[UPKCL_big_sales])),SEEK:([
8、big_sales].[stor_id]={1}ORDEREDFORbig_salestText------------------------------------------------------------------------------
9、-ClusteredIndexSeek(OBJECT:([pubs].[dbo].[big_sales].[UPKCL_big_sales]),SEEK:([big_sales].[stor_id]>=7131)ORDERFORbig_salesWherestor_idb
10、ettText------------------------------------------------------------------------------
11、-ClusteredIndexSeek(OBJECT:([pubs].[dbo].[big_sales].[UPKCL_big_sales]),SEEK:([big_sales].[stor_id]>=7066and([big_sales].[stor_id]<=7131)ORDERFORWARD) 這個看起來也一樣。只是查找謂詞改變了。因為查
12、找是非??斓模赃@個查詢是相當(dāng)好的?! EEK和SCAN也可包含Where謂詞。在這種情況下,這個謂詞告訴你Where子句從結(jié)果集中過濾出哪些記錄。因為它是作為SEEK或SCAN的一個組件執(zhí)行的,Where子句通常既不損害也不提高這個操作本身的性能。Whe1234下一頁>>>>這篇文章來自..,。re子句會幫助查詢優(yōu)化器找到可能有最佳性能的索引?! 〔樵儍?yōu)化的一個重要部分是要確定是否在某個索引上執(zhí)行SEEK操作,如果是這樣,就找到了具有最佳性能的索引。大部分情況下,查詢引擎能出色地查找到存在的索引。但是,目前有三種涉及到索
13、引的常見問題: ◆數(shù)據(jù)庫設(shè)計師,通常是應(yīng)用開發(fā)者,在表中沒有建立任何索引?! 魯?shù)據(jù)庫設(shè)計師通常猜測不到常用的查詢或事務(wù)類型,所以建立在表上的索引或主鍵往往效率不高?! 舢?dāng)索引表被創(chuàng)建時,即使數(shù)據(jù)庫設(shè)計師猜測較準(zhǔn),但事務(wù)負(fù)載隨著時間將發(fā)生改變,使得這些索引效率變差?! ∪?/p>