自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server索引覆蓋的實(shí)際應(yīng)用代碼描述

數(shù)據(jù)庫(kù) SQL Server
此文章主要向大家描述的是SQL Server索引覆蓋(Index Covering),以及對(duì)其在實(shí)際操作中值得我們大家注意的實(shí)際應(yīng)用代碼的描述。

以下的文章主要向大家講述的是SQL Server索引覆蓋(Index Covering),SQL Server數(shù)據(jù)庫(kù)索引覆蓋主要是這種情況,查詢中的select 與where子句中所需要的信息都能在非聚集索引中找到。

因?yàn)榉蔷奂饕艘粋€(gè)對(duì)應(yīng)于表中每個(gè)數(shù)據(jù)行的一個(gè)葉子行,SQL Server能從非聚集索引的葉子行來(lái)滿足查詢。這導(dǎo)致了數(shù)據(jù)檢索的更快,因?yàn)樗械男畔⒛軓乃饕?yè)中直接獲得,并且避免了SQL Server查找數(shù)據(jù)頁(yè)。

因?yàn)榉蔷奂饕娜~子頁(yè)都連接在一起,索引的葉級(jí)可以像表中的數(shù)據(jù)頁(yè)一樣進(jìn)行掃描,因?yàn)轫?yè)級(jí)行都典型比數(shù)據(jù)行要小,一個(gè)覆蓋了查詢的非聚集索引將比同樣列的聚集索引更快,因?yàn)樾枰x取的頁(yè)數(shù)要更少。

在下面的例子中,quthors表中的關(guān)于au_lname 和au_fname的非聚集索引將覆蓋查詢,因?yàn)榻Y(jié)果中的列和SARG都能從索引中提取出來(lái):

  1. Sql代碼   
  2. Select au_lname, au_fname   
  3. From authors   
  4. Where au_lname like "M%"   
  5. GO   
  6. Select au_lname, au_fname  
  7. From authors  
  8. Where au_lname like "M%"  
  9. GO  

其他使用聚合函數(shù)(MIN AVG SUM COUNT)的查詢或者僅僅檢查是否存在的查詢也能從SQL Server索引覆蓋中獲益。下面是一些能夠利用索引覆蓋優(yōu)點(diǎn)的查詢:

  1. Sql代碼   
  2. Select count (au_lname) from authors where au_lname like 'm%'   
  3. Select count (*) from authors where au_lname like 'm%'   
  4. Select count (*) from authors   
  5. Select count (au_lname) from authors where au_lname like 'm%'  
  6. Select count (*) from authors where au_lname like 'm%'  
  7. Select count (*) from authors  

 

你可能會(huì)奇怪最后一個(gè)查詢,它甚至沒(méi)有一個(gè)具體的SARG,怎么還能使用索引。SQL Server知道非聚集索引的特性,一個(gè)非聚集索引為表中的每行數(shù)據(jù)都包含了一行;它能夠簡(jiǎn)單的計(jì)算任何一個(gè)非聚集索引的行數(shù),而不需要掃描整個(gè)表。對(duì)最后一個(gè)查詢,SQL Server選擇最小的非聚集索引——也就是,具有最少的葉子頁(yè)的索引。

 

向非聚集索引添加列使得發(fā)生SQL Server索引覆蓋是一種提高查詢響應(yīng)時(shí)間的常見(jiàn)方法??紤]下面的查詢:

  1. Sql代碼   
  2. Select royalty from titles   
  3. Where price between $10 and $ 20   
  4. Select royalty from titles  
  5. Where price between $10 and $ 20  

 

如果你僅在price列上創(chuàng)建索引,SQL Server能發(fā)現(xiàn)滿足price在該范圍的索引中的行,但是它還需要訪問(wèn)數(shù)據(jù)行來(lái)檢索royalty。范圍中有100行,最壞情況下檢索數(shù)據(jù)所花費(fèi)的IO代價(jià)計(jì)算如下:

 

 

引用

 

索引的級(jí)數(shù)

 

+查找匹配行的索引頁(yè)的數(shù)

 

+100 * 每個(gè)書簽查找頁(yè)數(shù)

 

如果royalty列添加到了price列索引中了,索引能被掃描來(lái)檢索結(jié)果,而不是進(jìn)行書簽查找,這樣具有更快的查詢響應(yīng)。使用SQL Server索引覆蓋的IO代價(jià)將只是:

引用

索引級(jí)數(shù)

 

+查找匹配行的索引頁(yè)的數(shù)

 

 

引用

 

注意:

 

當(dāng)考慮添加索引來(lái)利用索引覆蓋時(shí),小心使得索引變得太寬。當(dāng)索引行的寬度接近與數(shù)據(jù)行寬度時(shí),覆蓋的優(yōu)點(diǎn)將失去,因?yàn)樵黾恿巳~級(jí)頁(yè)的數(shù)目。當(dāng)索引的葉級(jí)頁(yè)的數(shù)目接近了表中頁(yè)的數(shù)目,索引級(jí)數(shù)也增加了,那么索引掃描的時(shí)間就開始接近于表掃描時(shí)間了。

 

另外,如果你添加對(duì)到索引中的列頻繁修改,數(shù)據(jù)行中列的任何修改也會(huì)波及到索引中。這增加了維護(hù)的負(fù)擔(dān),也會(huì)影響修改的性能。

 

 

正如第33章討論的那樣,當(dāng)在一個(gè)表上創(chuàng)建了 一個(gè)聚集索引,聚集鍵會(huì)被所有的非聚集索引引用,作為書簽來(lái)定位實(shí)際的數(shù)據(jù)行。聚集鍵實(shí)際就是一些列,它們構(gòu)成了聚集索引和它們的數(shù)據(jù)值。這種特性有時(shí)也能導(dǎo)致SQL Server索引覆蓋。

 

例如,假設(shè)suthors表在au_lname au_fname列上建立聚集索引,并有一個(gè)定義在au_id的非聚集索引。非聚集索引的每行都包含了與數(shù)據(jù)行對(duì)應(yīng)的au_lname au_fname聚集鍵值。因?yàn)檫@個(gè)原因,下面查詢將被非聚集索引覆蓋:

 

 

  1. Sql代碼   
  2. select au_lname, au_fname   
  3. from authors   
  4. where au_id like '123%'  

以上的相關(guān)內(nèi)容就是對(duì)SQL Server索引覆蓋(Index Covering)的介紹,望你能有所收獲。

【編輯推薦】

  1. SQL Server創(chuàng)建約束的代碼運(yùn)用
  2. SQL Server創(chuàng)建表所要用到的代碼
  3. 優(yōu)化SQL Server數(shù)據(jù)庫(kù)的經(jīng)驗(yàn)大盤點(diǎn)
  4. SQL Server 2005商業(yè)智能功能淺析
  5. 修改SQL Server 2005 數(shù)據(jù)庫(kù)的執(zhí)行環(huán)境很簡(jiǎn)單
責(zé)任編輯:佚名 來(lái)源: csdn.net
相關(guān)推薦

2010-07-07 10:54:22

SQL Server索

2010-07-08 16:44:21

SQL Server索

2010-07-07 09:27:15

SQL Server索

2010-06-17 10:02:12

SQL Server數(shù)

2010-06-18 10:56:40

SQL server合

2010-07-05 08:31:25

SQL Server快

2010-07-07 11:03:21

SQL Server索

2010-06-28 13:27:33

SQL Server視

2010-05-12 09:42:24

MySQL 列值比較

2010-07-19 16:17:41

SQL Server聚

2010-07-07 09:47:04

SQL Server索

2010-07-12 17:06:30

SQL Server

2010-07-05 12:21:57

SQL Server記

2010-07-06 09:20:30

SQL Server查

2010-06-28 13:56:16

SQL Server代

2010-05-31 13:57:49

2011-03-30 11:28:31

SQL Server聚集索引

2010-05-10 13:33:11

Oracle存儲(chǔ)過(guò)程

2010-06-17 12:26:51

SQL Server索

2010-07-05 14:20:29

點(diǎn)贊
收藏

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