激情五月天婷婷,亚洲愉拍一区二区三区,日韩视频一区,a√天堂中文官网8

<ul id="buwfs"><strike id="buwfs"><strong id="buwfs"></strong></strike></ul>
    <output id="buwfs"></output>
  • <dfn id="buwfs"><source id="buwfs"></source></dfn>
      <dfn id="buwfs"><td id="buwfs"></td></dfn>
      <div id="buwfs"><small id="buwfs"></small></div>
      <dfn id="buwfs"><source id="buwfs"></source></dfn>
      1. <dfn id="buwfs"><td id="buwfs"></td></dfn>
        始創(chuàng)于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業(yè)
        • 60秒人工響應(yīng)
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        全部產(chǎn)品
        您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

        SQL Server: 局部變量是如何影響查詢性能的

        發(fā)布時間:  2012/8/4 17:04:55
        數(shù)據(jù)庫開發(fā)者在存儲過程和腳本中使用局部變量是很常見的事情,但是,局部變量會影響查詢的性能,接下來我們來證實這一點。
        首先讓我們創(chuàng)建一個表并插入一些測試數(shù)據(jù):
        1. USE AdventureWorks  
        2. GO  
        3. CREATE TABLE TempTable  
        4.       (tempID UNIQUEIDENTIFIER,tempMonth INT, tempDateTime DATETIME )  
        5. GO  
        6.  
        7. INSERT INTO TempTable (tempID, tempMonth, tempDateTime)  
        8. SELECT NEWID(),(CAST(100000*RAND() AS INT) % 12) + 1 ,GETDATE()  
        9. GO 100000 -- (EXECUTE THIS BATCH 100000 TIME)  
        10.  
        11. -- Create an index to support our query  
        12. CREATE NONCLUSTERED INDEX [IX_tempDateTime] ON [dbo].[TempTable]  
        13. ([tempDateTime] ASC)  
        14. INCLUDE ( [tempID]) WITH ( ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]  
        15. GO 
         

        然后我們做一個簡單的查詢:

         
        1. SET STATISTICS IO ON 
        2. GO  
        3. SELECT * FROM TempTable  
        4. WHERE tempDateTime > '2012-07-10 03:18:01.640' 
         

        Table 'TempTable'. Scan count 1, logical reads 80, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

         
        檢查這個執(zhí)行計劃以及索引檢索的屬性,你會發(fā)現(xiàn)預(yù)估行數(shù)是實際行數(shù)的兩倍,但并不會太影響執(zhí)行計劃,因為優(yōu)化器選擇了最合適的查詢方法:
         
         
        查詢優(yōu)化器根據(jù)基本統(tǒng)計直方圖來預(yù)估數(shù)據(jù)行數(shù),即:EQ_ROWS + AVG_RANGE_ROWS (77 + 88.64286) DBCC SHOW_STATISTICS ('dbo.TempTable', IX_tempDateTime) 
         
        現(xiàn)在我們修改 SELECT 語句以使用局部變量,你會發(fā)現(xiàn)查詢優(yōu)化器使用了一個不同的查詢計劃,這是一個更耗時的計劃,為什么?
        1. DECLARE @RequiredDate DATETIME  
        2. SET @RequiredDate = '2012-07-10 03:18:01.640' 
        3.  
        4. SELECT * FROM TempTable  
        5. WHERE tempDateTime  > @RequiredDate 
         

        ------------------------------------------------------------------------------------------
         

         
        Table 'TempTable'. Scan count 1, logical reads 481, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
         
         
        預(yù)估值和實際值差別更大,相當(dāng)于查詢優(yōu)化器無法選擇最適合的查詢計劃,因為錯誤的預(yù)估值。因為查詢優(yōu)化在執(zhí)行時并不清楚局部變量值,導(dǎo)致無法使用統(tǒng)計直方圖。
        不等式運算符的情況
        在我們的查詢中使用的不等式運算符,因此查詢優(yōu)化器使用了一個簡單的 30% 的算式來預(yù)估。
        Estimated Rows =(Total Rows * 30)/100 = (100000*30)/100 = 30000
        等式運算符的情況
        1. DECLARE @RequiredDate DATETIME  
        2. SET @RequiredDate = '2012-07-10 03:18:01.640' 
        3.  
        4. SELECT * FROM TempTable  
        5. WHERE tempDateTime  = @RequiredDate 
         

        如果在局部變量中使用等式運算符,那么查詢優(yōu)化器又會選擇不同的公式,即 精確度 * 表記錄總數(shù). 執(zhí)行下面查詢可獲取精確的值

         
        DBCC SHOW_STATISTICS('dbo.TempTable', IX_tempDateTime)
        All Density = 0.0007358352 Total Number of Rows in Table = 100000
        Estimated Rows = Density * Total Number = 0.0007358352 * 100000 = 73.5835

        本文出自:億恩科技【mszdt.com】

        服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

      2. 您可能在找
      3. 億恩北京公司:
      4. 經(jīng)營性ICP/ISP證:京B2-20150015
      5. 億恩鄭州公司:
      6. 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
      7. 億恩南昌公司:
      8. 經(jīng)營性ICP/ISP證:贛B2-20080012
      9. 服務(wù)器/云主機 24小時售后服務(wù)電話:0371-60135900
      10. 虛擬主機/智能建站 24小時售后服務(wù)電話:0371-60135900
      11. 專注服務(wù)器托管17年
        掃掃關(guān)注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
          0
         
         
         
         

        0371-60135900
        7*24小時客服服務(wù)熱線