日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
SQL Server數(shù)據(jù)庫(kù)的相關(guān)性能問(wèn)題與隱式轉(zhuǎn)換

此文章主要向大家描述的是正確的隱式轉(zhuǎn)換與SQL Server數(shù)據(jù)庫(kù)的相關(guān)性能問(wèn)題,面臨的問(wèn)題可以對(duì)其通過(guò)在HumanResources.Employee表的SQL Server 200***dventureWorks數(shù)據(jù)庫(kù)中做一個(gè)類(lèi)似的查詢(xún)來(lái)看到。

創(chuàng)新互聯(lián)建站是一家從事企業(yè)網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、行業(yè)門(mén)戶(hù)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)制作的專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁(yè)設(shè)計(jì)人員,具備各種規(guī)模與類(lèi)型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹(shù)立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來(lái)曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)上1000+。

為了幫助我們更好地理解SQL Server在我們運(yùn)行這些查詢(xún)時(shí)都做了什么,讓我們來(lái)查找IO統(tǒng)計(jì)數(shù)據(jù),

我面臨的問(wèn)題可以通過(guò)在HumanResources.Employee表的SQL Server 200***dventureWorks數(shù)據(jù)庫(kù)中做一個(gè)類(lèi)似的查詢(xún)來(lái)看到。為了幫助我們更好地理解SQL Server在我們運(yùn)行這些查詢(xún)時(shí)都做了什么,讓我們來(lái)查找IO統(tǒng)計(jì)數(shù)據(jù),并且使用SSMS菜單命令Query\Include Actual Execution Plan。

為了使用AdventureWorks數(shù)據(jù)庫(kù)并且啟用IO統(tǒng)計(jì)數(shù)據(jù),讓我們從下面的查詢(xún)開(kāi)始:

 
 
 
  1. use AdventureWorks   
  2. go  
  3. SET STATISTICS IO ON  
  4. go  

這是對(duì)Employee表的一個(gè)查詢(xún),它類(lèi)似于給我?guī)?lái)上述麻煩的查詢(xún):

 
 
 
  1. SELECT EmployeeID, NationalIDNumber, LoginID   
  2. FROM HumanResources.Employee  
  3. WHERE NationalIDNumber = 112457891 
  4. go  

它看起來(lái)似乎不會(huì)給我們帶來(lái)什么麻煩。HumanResources.Employee表有一個(gè)以NationalIDNumber開(kāi)始的索引,因此執(zhí)行這個(gè)查詢(xún)只是查找112457891的位置然后對(duì)這個(gè)表的行作查找。但是統(tǒng)計(jì)數(shù)據(jù)和查詢(xún)計(jì)劃顯示了事情并非如此簡(jiǎn)單。這是相關(guān)的信息:

 
 
 
  1. EmployeeID NationalIDNumber LoginID   
  2. 4 112457891 adventure-works\rob0  
  3. (1 row(s) affected)  
  4. Table 'Employee'. Scan count 1, logical reads 6,  
  5. physical reads 0, read-ahead reads 0,  
  6. lob logical reads 0, lob physical reads 0,  
  7. lob read-ahead reads 0.  
  8. (1 row(s) affected)  

該統(tǒng)計(jì)數(shù)據(jù)顯示有一個(gè)掃描,而這正是問(wèn)題所在。Adventureworks.HumanResources.Employee只有291行,因此這可能真的可以很快地運(yùn)行并且看似不會(huì)造成什么問(wèn)題。我使用的表有數(shù)百萬(wàn)行,表掃描正是兇手,因?yàn)樗鼘?duì)于每次查詢(xún)都要花幾秒的時(shí)間。

由于NationalIDNumber字段在索引以及該索引***字段的開(kāi)頭,那么為什么這里只有一個(gè)掃描而沒(méi)有查找呢?下面的查詢(xún)機(jī)壞昂告訴我們?yōu)槭裁?。這是你可以看到索引掃描的整個(gè)計(jì)劃:

該索引掃描的工具技巧給出所有不同點(diǎn)的詳細(xì)信息,如下所示:

紅色箭頭指向了該問(wèn)題。函數(shù)CONVERT_IMPLICIT(int, [AdventureWorks].[HumanResources].[Employee].[NationalIDNumber, 0)在它與我們傳遞到該查詢(xún)中的整數(shù)常數(shù)1124579811比較之前修改了NationalIDNumber字段。如果你查看這張表的定義,那么你就會(huì)看到NationalIDNumber被定義成nvarchar(15)。一旦這里有個(gè)函數(shù),即使是我們?cè)谶@里看到的自帶函數(shù)用于這個(gè)字段,SQL Server數(shù)據(jù)庫(kù)都不能在NationalDNumber上使用索引,它會(huì)返回到一個(gè)掃描中。

更改這個(gè)查詢(xún)來(lái)與一個(gè)字符串常數(shù)比較,這個(gè)問(wèn)題將得到解決:

 
 
 
  1. SELECT EmployeeID, NationalIDNumber, LoginID   
  2. FROM HumanResources.Employee  
  3. WHERE NationalIDNumber = '112457891' 
  4. go  

這些信息現(xiàn)在顯示為零掃描,這正是我們想要的。在這個(gè)案例中,邏輯讀的不同點(diǎn)是只有2,這是因?yàn)镋mployee很小。如果在數(shù)百萬(wàn)行的表上進(jìn)行這個(gè)過(guò)程,那么邏輯讀的不同點(diǎn)將變成幾千。

 
 
 
  1. EmployeeID NationalIDNumber LoginID   
  2. 4 112457891 adventure-works\rob0  
  3. (1 row(s) affected)  
  4. Table 'Employee'. Scan count 0, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.  
  5. (1 row(s) affected)  

查詢(xún)計(jì)劃顯示查找和主鍵查找正是我們希望看到的。

一個(gè)字符串用于存儲(chǔ)一個(gè)數(shù)字型主鍵的問(wèn)題是很常見(jiàn)的。SQL Server數(shù)據(jù)庫(kù)將很忠實(shí)地執(zhí)行隱式轉(zhuǎn)換并返回正確的結(jié)果,但是要以較差的性能為代價(jià),通過(guò)一個(gè)掃描而不是查找來(lái)進(jìn)行并且要正確使用該索引。

下一步

要一直警惕隱式轉(zhuǎn)換,尤其是有存儲(chǔ)數(shù)字型鍵的字符串的時(shí)候。

我甚至在varchar字段與nvarchar字段進(jìn)行比較的時(shí)候看到這個(gè)問(wèn)題。

更正這個(gè)問(wèn)題是很簡(jiǎn)單的,你只需要確保在相似的數(shù)據(jù)類(lèi)型上執(zhí)行比較。

【編輯推薦】

  1. SQL Serverlink Oracle的幾種不同方式
  2. SQL Server Compact中的DLL文件與工具
  3. SQL Server數(shù)據(jù)庫(kù)在安裝時(shí)的注意事項(xiàng)
  4. SQL Server 2005 Express混合模式登錄的設(shè)置
  5. SQL Server 2005數(shù)據(jù)庫(kù)安裝實(shí)例演示

網(wǎng)頁(yè)名稱(chēng):SQL Server數(shù)據(jù)庫(kù)的相關(guān)性能問(wèn)題與隱式轉(zhuǎn)換
文章路徑:http://www.dlmjj.cn/article/cdiphed.html