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

SQL Server索引覆蓋的實際應用代碼描述

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

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

因為非聚集索引包含了一個對應于表中每個數據行的一個葉子行,SQL Server能從非聚集索引的葉子行來滿足查詢。這導致了數據檢索的更快,因為所有的信息能從索引頁中直接獲得,并且避免了SQL Server查找數據頁。

因為非聚集索引的葉子頁都連接在一起,索引的葉級可以像表中的數據頁一樣進行掃描,因為頁級行都典型比數據行要小,一個覆蓋了查詢的非聚集索引將比同樣列的聚集索引更快,因為需要讀取的頁數要更少。

在下面的例子中,quthors表中的關于au_lname 和au_fname的非聚集索引將覆蓋查詢,因為結果中的列和SARG都能從索引中提取出來:

  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  

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

  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  

 

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

 

向非聚集索引添加列使得發生SQL Server索引覆蓋是一種提高查詢響應時間的常見方法。考慮下面的查詢:

  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列上創建索引,SQL Server能發現滿足price在該范圍的索引中的行,但是它還需要訪問數據行來檢索royalty。范圍中有100行,最壞情況下檢索數據所花費的IO代價計算如下:

 

 

引用

 

索引的級數

 

+查找匹配行的索引頁的數

 

+100 * 每個書簽查找頁數

 

如果royalty列添加到了price列索引中了,索引能被掃描來檢索結果,而不是進行書簽查找,這樣具有更快的查詢響應。使用SQL Server索引覆蓋的IO代價將只是:

引用

索引級數

 

+查找匹配行的索引頁的數

 

 

引用

 

注意:

 

當考慮添加索引來利用索引覆蓋時,小心使得索引變得太寬。當索引行的寬度接近與數據行寬度時,覆蓋的優點將失去,因為增加了葉級頁的數目。當索引的葉級頁的數目接近了表中頁的數目,索引級數也增加了,那么索引掃描的時間就開始接近于表掃描時間了。

 

另外,如果你添加對到索引中的列頻繁修改,數據行中列的任何修改也會波及到索引中。這增加了維護的負擔,也會影響修改的性能。

 

 

正如第33章討論的那樣,當在一個表上創建了 一個聚集索引,聚集鍵會被所有的非聚集索引引用,作為書簽來定位實際的數據行。聚集鍵實際就是一些列,它們構成了聚集索引和它們的數據值。這種特性有時也能導致SQL Server索引覆蓋。

 

例如,假設suthors表在au_lname au_fname列上建立聚集索引,并有一個定義在au_id的非聚集索引。非聚集索引的每行都包含了與數據行對應的au_lname au_fname聚集鍵值。因為這個原因,下面查詢將被非聚集索引覆蓋:

 

 

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

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

【編輯推薦】

  1. SQL Server創建約束的代碼運用
  2. SQL Server創建表所要用到的代碼
  3. 優化SQL Server數據庫的經驗大盤點
  4. SQL Server 2005商業智能功能淺析
  5. 修改SQL Server 2005 數據庫的執行環境很簡單
責任編輯:佚名 來源: csdn.net
相關推薦

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數

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-05-12 09:42:24

MySQL 列值比較

2010-07-07 09:47:04

SQL Server索

2010-07-19 16:17:41

SQL Server聚

2010-07-05 12:21:57

SQL Server記

2010-07-12 17:06:30

SQL Server

2010-07-06 09:20:30

SQL Server查

2010-06-28 13:27:33

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存儲過程

2010-06-17 12:26:51

SQL Server索

2010-07-05 14:20:29

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产精品成人综合久久久 | 久久久久久久国产 | 国产精品免费观看 | 九色视频网站 | 成人午夜在线观看 | 久久久久国产精品www | 国产99久久精品一区二区300 | 欧美色专区| 国产精品国产a级 | 欧美久久久久 | 久久精品视频在线观看 | 久久天堂网 | 欧美日一区 | 黄色成人在线观看 | 中文在线一区二区 | av黄色免费在线观看 | 国产操操操 | 瑟瑟激情 | 福利成人 | 日韩欧美一级精品久久 | 色综合av| 国产精品一区二区在线 | 国产日韩欧美精品一区二区三区 | 草久久久 | 国产激情精品视频 | 人人爽人人爽人人片av | 国产成人免费网站 | 国产一区二区精品在线观看 | 91久久 | 精品福利av导航 | 久久精品视频在线观看 | 懂色中文一区二区三区在线视频 | 一区二区在线不卡 | 亚洲精品久久久久久久不卡四虎 | 成人免费视频一区 | 亚洲欧洲在线视频 | 色性av| 天天干天天插 | 成人午夜免费视频 | 久久国| 久久亚洲国产精品 |