成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server數(shù)據(jù)庫的相關(guān)性能問題與隱式轉(zhuǎn)換

數(shù)據(jù)庫 SQL Server
此文章主要向大家講述的是正確的隱式轉(zhuǎn)換與SQL Server數(shù)據(jù)庫的相關(guān)性能問題,以下就是文章的主要內(nèi)容的詳細描述。

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

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

 

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

 

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

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

 

這是對Employee表的一個查詢,它類似于給我?guī)砩鲜雎闊┑牟樵儯?/p>

 

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

 

 

它看起來似乎不會給我們帶來什么麻煩。HumanResources.Employee表有一個以NationalIDNumber開始的索引,因此執(zhí)行這個查詢只是查找112457891的位置然后對這個表的行作查找。但是統(tǒng)計數(shù)據(jù)和查詢計劃顯示了事情并非如此簡單。這是相關(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)計數(shù)據(jù)顯示有一個掃描,而這正是問題所在。Adventureworks.HumanResources.Employee只有291行,因此這可能真的可以很快地運行并且看似不會造成什么問題。我使用的表有數(shù)百萬行,表掃描正是兇手,因為它對于每次查詢都要花幾秒的時間。

 

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

該索引掃描的工具技巧給出所有不同點的詳細信息,如下所示:

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

更改這個查詢來與一個字符串常數(shù)比較,這個問題將得到解決:

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

 

 

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

 

  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)  

 

 

查詢計劃顯示查找和主鍵查找正是我們希望看到的。

 

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

下一步

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

我甚至在varchar字段與nvarchar字段進行比較的時候看到這個問題。

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

 

【編輯推薦】

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

 

責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2010-04-07 09:31:02

Oracle數(shù)據(jù)庫

2010-07-05 13:36:21

SQL Server

2021-03-04 22:02:18

SQL Serve數(shù)據(jù)庫架構(gòu)

2019-09-06 08:22:20

MySQL數(shù)據(jù)庫索引

2021-03-19 07:12:23

SQL Server數(shù)據(jù)庫數(shù)據(jù)庫收縮

2021-03-24 14:50:00

SQLServer數(shù)據(jù)庫字符串

2010-07-23 15:03:02

SQL Server數(shù)

2010-06-17 13:34:47

SQL Server數(shù)

2010-06-29 16:41:24

SQL Server分

2022-02-23 21:24:21

索引SQL字符

2011-04-01 14:05:09

SQL數(shù)據(jù)庫

2010-08-17 09:22:34

2010-07-01 11:14:36

SQL Server

2010-07-15 17:28:50

SQL Server

2010-07-07 14:24:42

SQL Server

2011-04-06 16:15:21

SQL Server數(shù)簡體繁體

2011-08-04 15:20:52

SQL Server數(shù)據(jù)庫鏡像

2011-01-19 09:51:25

SQL Server

2010-07-16 15:53:19

SQL Server數(shù)

2010-07-21 14:11:36

SQL Server
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91精品国产色综合久久不卡98 | 一区二区成人 | 伊人久久综合影院 | 欧美精品v国产精品v日韩精品 | 国产精品国产a级 | 中文字幕第一页在线 | 日本不卡在线观看 | 精品久久久久久亚洲精品 | 日本特黄a级高清免费大片 成年人黄色小视频 | 成人免费视频一区 | 中文字幕 国产精品 | 亚洲精品乱码 | 91麻豆产精品久久久久久夏晴子 | 午夜精品久久久久久不卡欧美一级 | 日韩中文字幕一区 | 国产精品一区网站 | 国产精品视频在线播放 | www国产亚洲精品久久网站 | h视频在线免费 | 国产一区中文 | 九九热热九九 | 国产精品国产三级国产aⅴ无密码 | 91av视频在线免费观看 | 成人亚洲一区 | 麻豆精品国产免费 | 国产成人av一区二区三区 | 一区二区三区av | 日韩在线观看网站 | 精品粉嫩aⅴ一区二区三区四区 | 亚洲国产精品一区二区三区 | 亚洲 欧美 在线 一区 | 午夜精品久久久久久久久久久久 | 高清人人天天夜夜曰狠狠狠狠 | 欧美群妇大交群中文字幕 | 久久精品97 | 一区二区三区视频在线免费观看 | 欧美成人自拍视频 | 超碰人人91| 久久精品 | 午夜在线免费观看视频 | 久久久精品一区二区三区 |