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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer索引的正確使用標(biāo)準(zhǔn)是啥樣?

文章主要描述的是SQL Server索引的正確使用標(biāo)準(zhǔn)(Index Usage Criteria),在實際操作中為了有確定性的決定哪些SQL Server索引應(yīng)該創(chuàng)建,我們一定要決定這些索引實際中是否被SQL Server使用過。

創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、成都網(wǎng)站制作與策劃設(shè)計,鐵鋒網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:鐵鋒等地區(qū)。鐵鋒做網(wǎng)站價格咨詢:18982081108

如果一個索引不能被有效使用,在修改數(shù)據(jù)時,那只會浪費空間和增加不必要的負擔(dān)。

需要記住的主要標(biāo)準(zhǔn)是:如果至少是索引的***列沒有被包含在一個有效的搜索參數(shù)(search argument SARG)或join子句中,那么SQL Server 就不會使用索引進行更有效地書簽查找(bookmark lookup)。為創(chuàng)建復(fù)合SQL Server索引,選擇列的順序時牢記住這一點,想想下面的在store表中的索引:

Create index nc1_stores on stores (city, state, zip)

下面的每一個查詢將會用到索引,因為它們包含了SQL Server索引的***列city,其為一個SARG:

Sql代碼

 
 
 
  1. select stor_name from stores   
  2. where city = 'Frederick'   
  3. and state = 'MD'   
  4. and zip = '21702'   
  5. select stor_name from stores   
  6. where city = 'Frederick' 
  7. and state = 'MD' 
  8. and zip = '21702' 
  9. Sql代碼   
  10. select stor_name from stores   
  11. where city = 'Frederick'   
  12. and state = 'MD'   
  13. select stor_name from stores  
  14. where city = 'Frederick' 
  15. and state = 'MD' 
  16. Sql代碼   
  17. select stor_name from stores   
  18. where city = 'Frederick'   
  19. and zip = '21702'   
  20. select stor_name from stores  
  21. where city = 'Frederick' 
  22. and zip = '21702' 

然而,下面的查詢不會用到索引而進行書簽查找,因為它們沒指定city列為一個SARG:

Sql代碼

 
 
 
  1. select stor_name from stores   
  2. where state = 'MD'   
  3. and zip = '21702'   
  4. select stor_name from stores   
  5. where state = 'MD' 
  6. and zip = '21702' 

Sql代碼

 
 
 
  1. select stor_name from stores   
  2. where zip = '21702'   
  3. select stor_name from stores  
  4. where zip = '21702' 

引用

注釋:

對于前面提到的***兩個查詢,如果你顯示執(zhí)行計劃(execution plan)信息,你可能發(fā)現(xiàn),查詢實際上使用了nc1_store索引來檢索了結(jié)果集(resultset)。如果再仔細看,你會發(fā)現(xiàn)查詢沒有使用索引最有效地方式——它使用了索引掃描(index scan),而不是索引查找(index seek)。

有關(guān)查詢存取方法(query aceess method)的更多信息,可參見第35章“Understanding Query Optimization”,在該章中將講述索引查找。

在索引查找(Index seek)中,SQL Server 沿著索引樹(index tree)從根級(root level)向下進行索引鍵值匹配搜索,直到搜索到指定的行,然后使用存儲在SQL Server索引鍵值中的書簽值(bookmark value)直接從數(shù)據(jù)頁中檢索匹配的數(shù)據(jù)行(這個書簽值可以是行標(biāo)識符(RID),或者聚集索引的鍵值)。

對一個索引掃描(Index scan),SQL Server搜索索引樹中所有葉級(leaf level)中的行來進行可能匹配的查找。如果發(fā)現(xiàn)滿足匹配的行,然后利用書簽檢索數(shù)據(jù)行。

盡管兩者都使用了索引,從I/O代價角度來講,索引掃描比索引查找的代價要高,但比表掃描(Table scan)要略微要小些。然而,本章學(xué)習(xí)設(shè)計索引的目的是為了使用索引查找,所以當(dāng)我談到使用索引時,指的是索引查找。

為了得到可能列的書簽查詢,你可能想到的一個容易的方法是在表中所有列上都創(chuàng)建索引,這樣任何類型的查詢都可以使用索引了。這種策略可能在某些支持ad hoc queries(隨意的查詢)的只讀的DSS(決策支持系統(tǒng))環(huán)境下是合適的,但是這樣也存在問題,因為仍然會造成有許多索引不被使用。

正如你在本章的Index selection節(jié)看到的,不會僅僅因為在某列創(chuàng)建了索引,優(yōu)化器就總會使用該列的索引,例如,當(dāng)該列的選擇性不夠時(not selective enough),就不會使用該列的索引。另外,在一張大表(large table)上創(chuàng)建太多索引會占據(jù)數(shù)據(jù)庫中的大量空間,增加了備份的要求時間。前面也提到過,在一個OLTP(在線聯(lián)機處理)系統(tǒng)上,太多的索引會給數(shù)據(jù)的插入、修改、刪除操作帶來大量的額外負擔(dān),造成性能上的不利影響。

引用

建議:(每張表4-5個索引)

我曾經(jīng)常犯的一個設(shè)計錯誤是在OLTP環(huán)境下定義了太多的索引。許多情況下,有些SQL Server索引是冗余的或者是優(yōu)化器在處理查詢時就根本沒有考慮。結(jié)果,這些索引導(dǎo)致空間的浪費和增加了修改數(shù)據(jù)時的不必要負擔(dān)。

在這一點上有一個案例,有個客戶在一個表上創(chuàng)建了8個索引,其中4個索引都是在同一列上,該列的鍵值唯一(unique key),在索引中該列都是***個索引列。對表的查詢和修改操作,該列都包含在where 子句中。結(jié)果只有4個的其中1個索引曾被用到過。

希望在本章結(jié)束后,你將會理解為什么所有這些SQL Server索引不是必須的,并且能重新認(rèn)識和決定在哪些列上創(chuàng)建索引將會收益,而哪些列上應(yīng)避免創(chuàng)建索引。

【編輯推薦】

  1. SQL Server數(shù)據(jù)庫在安裝時的注意事項
  2. SQL Server 2005數(shù)據(jù)庫安裝實例演示
  3. SQL Server 2000全文檢索的使用方案描述
  4. SQL Server數(shù)據(jù)庫與identity列
  5. SQL Server 實用操作的代碼演示

網(wǎng)頁題目:SQLServer索引的正確使用標(biāo)準(zhǔn)是啥樣?
網(wǎng)站URL:http://www.dlmjj.cn/article/cciiscp.html