欧洲精品一区二区三区久久_无码内射中文字幕岛国片_国产精品99久久免费黑人人妻_人人爽人人av_伊人再见免费在线观看高清版 _成年人黄色片视频_免费看欧美一级片_国产极品尤物在线_久久久999免费视频_亚洲激情免费视频_免费成人深夜夜行网站视频_91aaa精品

快消品貨源批發(fā)市場
快消品貨源分銷平臺
 
 
當(dāng)前位置: 貨源批發(fā)網(wǎng) » 網(wǎng)商學(xué)院 » 獨(dú)立商城 » SQL Server 查詢性能優(yōu)化——創(chuàng)建索引原則(一)

SQL Server 查詢性能優(yōu)化——創(chuàng)建索引原則(一)

放大字體  縮小字體 發(fā)布日期:2024-11-20 07:20:16  來源:電商聯(lián)盟  作者:樂發(fā)網(wǎng)  瀏覽次數(shù):5

   索引是什么?索引是提高查詢性能的一個重要工具,索引就是把查詢語句所需要的少量數(shù)據(jù)添加到索引分頁中,這樣訪問數(shù)據(jù)時只要訪問少數(shù)索引的分頁就可以。但是索引對于提高查詢性能也不是萬能的,也不是建立越多的索引就越好。索引建少了,用WHERe子句找數(shù)據(jù)效率低,不利于查找數(shù)據(jù)。索引建多了,不利于新增、修改和刪除等操作,因為做這些操作時,SQL SERVER除了要更新數(shù)據(jù)表本身,還要連帶地立即更新所有的相關(guān)索引,而且過多的索引也會浪費(fèi)硬盤空間。因此要建得恰到好處,這就需要經(jīng)驗了。
一:索引的基本目的
     索引的基本目的是在大量數(shù)據(jù)中找尋少量數(shù)據(jù)。你可以想像一下,若一本書有700頁,就像數(shù)據(jù)表有700個數(shù)據(jù)頁,而索引卻有600個索引頁,你會想用索引來查詢書籍的內(nèi)容嗎?
     索引字段的值重復(fù)性越低越好,假設(shè)書籍中如“的”“了”這些在文章中重復(fù)性極高的字,每頁都有一大堆,你會先翻索引頁某個位置有“的”,翻回該頁讀取了“的”之后,再索引看下一個“的”,結(jié)果是在先前同一頁的不同位置,又翻回書籍原頁查看下一個“的”。
     那么怎么理解索引是從大量數(shù)據(jù)中尋找少量數(shù)據(jù)呢?下面我們舉個例子來說明。
     如果一個數(shù)據(jù)表的記錄平均長度為400字節(jié),則100萬條記錄需要5萬個數(shù)據(jù)頁,其計算公式如下:
  1000000/(8060/400)=50000
  如果該數(shù)據(jù)表建立聚集索引,鍵值為4個字節(jié)長度,而ID的數(shù)據(jù)長度為13個字節(jié),因此索引結(jié)構(gòu)每條記錄為20個字節(jié)。
  4(聚集索引鍵值)+13(ID鍵值)+3(管理信息)=20
  以ID字段所建立的索引,100%填充率,則總分頁數(shù)約為2482頁,其計算方式如下:
  1000000/(8060/20)
  即使是使用80%的填充率來計算也只有3106頁。其計算方式如下:
  1000000/((8060*0.8)/20)
  從上面可以看出如果是第一種情況,則索引頁只占到總數(shù)據(jù)頁的5%:
  2482/50000=0.04964 
  即使考慮取每頁只填充80%的索引數(shù)據(jù),第二種情況,索引頁也只是占總數(shù)據(jù)頁的6%:
  3106/50000=0.06212 
  再說如果查詢條件中的字段建立索引,則由于索引鍵值數(shù)據(jù)都是以B-Tree有順序的擺放,所以可采用二分查找找數(shù)據(jù)。也就是2的N次方大于記錄數(shù),就可以找到該條數(shù)據(jù)。而2的20次方大于100萬,因此最多找尋20次就可以找到該條記錄。由于比較次數(shù)少,數(shù)據(jù)結(jié)構(gòu)也小,節(jié)省訪問硬盤與內(nèi)在的資源,索引將大幅提升找尋數(shù)據(jù)的效率。SQL SERVER為提高訪問與查找對比的效率,用來作索引的數(shù)據(jù)域鍵值愈小愈好,也就是要讓分頁盡量存更多的鍵值記錄。
 注:
  如果未使用 UNIQUE 屬性創(chuàng)建聚集索引,數(shù)據(jù)庫引擎將向表自動添加一個 4 字節(jié)的 uniqueifier 列。必要時,數(shù)據(jù)庫引擎將向行自動添加一個 uniqueifier 值以使每個鍵唯一。此列和列值供內(nèi)部使用,用戶不能查看或訪問。
二:什么是索引
  在 SQL Server 中,索引是按 B 樹結(jié)構(gòu)進(jìn)行組織的。如下圖。
            
  您也可以把索引理解為一種特殊的目錄。微軟的SQL SERVER提供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。下面,舉例來說明一下聚集索引和非聚集索引的區(qū)別:
  其實,新華字典的正文本身就是一個聚集索引。比如,我們要查“按”字,就會很自然地翻開字典的前幾頁,因為“按”的拼音是“an”,而按照拼音排序的新華字典是以英文字母“a”開頭并以“z”結(jié)尾的,那么“按”字就自然地排在字典的前部。如果您翻完了所有以“a”開頭的部分仍然找不到這個字,那么就說明新華字典中沒有這個字;同樣的,如果查“招”字,那也會將新華字典翻到最后部分,因為“招”的拼音是“zhao”。也就是說,新華字典的正文部分本身就是一個目錄,您不需要再去查其他目錄來找到您需要找的內(nèi)容。我們把這種正文內(nèi)容本身就是一種按照一定規(guī)則排列的目錄稱為“聚集索引”。
  如果您碰到一個不認(rèn)識的字,不知道它的發(fā)音,這時候,您就不能按照剛才的方法找到您要查的字,而需要去根據(jù)“偏旁部首”查到您要找的字,然后根據(jù)這個字后的頁碼直接翻到某頁來找到您要找的字。但您結(jié)合“部首目錄”和“檢字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“張”字,我們可以看到在查部首之后的檢字表中“張”的頁碼是672頁,檢字表中“張”的上面是“馳”字,但頁碼卻是63 頁,“張”的下面是“弩”字,頁面是390頁。很顯然,這些字并不是真正的分別位于“張”字的上下方,現(xiàn)在您看到的連續(xù)的“馳、張、弩”三字實際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結(jié)果,然后 再翻到您所需要的頁碼。我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為“非聚集索引”。
通過以上例子,我們可以理解到什么是“聚集索引”和“非聚集索引”。進(jìn)一步引申一下。
聚集索引
  聚集索引指的是數(shù)據(jù)表本身就是索引的一部分,就是指數(shù)據(jù)表本身就是聚集索引的子葉層,整個數(shù)據(jù)表的擺放順序是按照你選定的鍵值由小到大排序,SQL SERVER  2000 之后的版本可指定數(shù)據(jù)由大到小排序。
  整個數(shù)據(jù)表按照鍵值字段由小到大排序,再搭配由鍵值字段加上指針的上層索引結(jié)構(gòu),也就是根節(jié)點和非子葉層級,形成整個聚集索引。因為數(shù)據(jù)表內(nèi)實際擺放數(shù)據(jù)的方式只能遵循一種順序,所以一個數(shù)據(jù)表只能有一個聚集索引。在指定聚集索引時,數(shù)據(jù)域本身并不需要唯一,或指定為唯一的聚集索引,SQL SERVER內(nèi)部會自動為重復(fù)的鍵值建立4個字節(jié)的唯一標(biāo)識。
  如果你的數(shù)據(jù)表有一列常常用來排序,另一列常常用來 范圍查詢,還有一列重復(fù)性非常高,則該用哪一列來做聚集索引。正確答案是依據(jù)哪個查詢最重要,最常被用戶執(zhí)行。例如:你的老板一小時內(nèi)多次執(zhí)行某個查詢當(dāng)然比一個月執(zhí)行一兩次的查詢來得重要。 
  表(堆)創(chuàng)建聚集索引或刪除和重新創(chuàng)建現(xiàn)有聚集索引時,要求數(shù)據(jù)庫具有額外的可用工作區(qū)來容納數(shù)據(jù)排序結(jié)果和原始表或現(xiàn)有聚集索引數(shù)據(jù)的臨時副本。 
  當(dāng)堆或聚集表具有多個分區(qū)時,每個分區(qū)都有一個堆或 B 樹結(jié)構(gòu),其中包含該指定分區(qū)的行組。例如,如果一個聚集表有 4 個分區(qū),那么將有 4 個 B 樹,每個分區(qū)一個。
  聚集索引( Clustered Index)
  ·        聚集索引的葉節(jié)點就是實際的數(shù)據(jù)頁
  ·        在數(shù)據(jù)頁中數(shù)據(jù)按照索引順序存儲
  ·        行的物理位置和行在索引中的位置是相同的
  ·        每個表只能有一個聚集索引
  ·        聚集索引的平均大小大約為表大小的 5%左右
  要使用索引來更有效地排序查詢數(shù)據(jù),最直接的方式就是在你要排序的字段上建立聚集索引。在建立聚集索引之后,SQL SERVER會重新組織數(shù)據(jù)頁,讓其中的數(shù)據(jù)行按照聚集索引中鍵值的順序存儲。SQL SERVER不需要在硬盤上的數(shù)據(jù)一定要實際按照聚集索引排序,但在建立聚集索引時,會嘗試在邏輯上排序數(shù)據(jù)的同時,也會在物理上讓數(shù)據(jù)盡可能地排序。在索引子葉層級中的每個數(shù)據(jù)頁都有一個指針指向索引分頁的前一頁與后一頁,形成雙向鏈接串行,在內(nèi)部的系統(tǒng)數(shù)據(jù)表包含了各索引子葉層第一個分頁的地址,為了保證數(shù)據(jù)在邏輯上是依照聚集索引的順序存放的,SQL SERVER 只需要由第一個分頁開始,并依照其連接串行一個接著一個依序?qū)ふ覕?shù)據(jù)即可。如下圖。
         
注:聚集表是有聚集索引的表。
非聚集索引
   非聚集索引是完全獨(dú)立于數(shù)據(jù)表之外的結(jié)構(gòu),所以不會影響數(shù)據(jù)行的順序,其子葉層包含索引行。每個索引行包含非聚集鍵值、行定位符和任意包含列或非鍵列。行定位符中存入的數(shù)據(jù)有兩種類型:書簽(BOOKMARK)或聚集索引的鍵值。如果數(shù)據(jù)表上建立了聚集索引,則行定位符中存入的數(shù)據(jù)就是聚集索引的鍵值。如果數(shù)據(jù)表沒有建立聚集索引,則行定位符中存入的數(shù)據(jù)就是書簽,即指向數(shù)據(jù)表中記錄具體位置的ROWID,也就是文檔編號、分頁編號與頁內(nèi)記錄編號(稱之為SOLT編號)所組合成的值。通過該ROWID 在數(shù)據(jù)表內(nèi)獲取數(shù)據(jù)就稱為書簽查找 BOOKMARK LOOKUP。所以,一般通過非聚集索引查找到符合的鍵值后,還會搭配書簽查找。
  當(dāng)非聚集索引從結(jié)構(gòu)中找到符合的記錄時,雖然在子葉層該鍵值是由小到大排序,因此可能在一個分頁上就有全部符合查詢條件的鍵值,但因為數(shù)據(jù)表中數(shù)據(jù)行的擺放是沒有按順序的(或是說沒有按照該非聚集索引的鍵值順序擺放),所以真正符合記錄的數(shù)據(jù)是散布在文檔各處的,而SQL SERVER每次讀取數(shù)據(jù)都是以數(shù)據(jù)頁為單位,因此,找到一條記錄所在位置后,要先將存放該條記錄的分頁讀到內(nèi)存中,再從該頁讀出記錄。
  因為BOOKMARK LOOKUP是進(jìn)行隨機(jī)的I/O操作,當(dāng)符合查詢的記錄很多時,通過非聚集索引訪問將導(dǎo)致數(shù)據(jù)頁讀取非常頻繁,就算兩條記錄在同一個分頁,該分頁也會被重復(fù)讀兩次,因此或符合的記錄有N條,就需要讀取數(shù)據(jù)表內(nèi)的分頁N頁,雖然大部分的讀取操作都是針對內(nèi)存中的高速緩存,但記錄數(shù)過多時一樣沒有效率,還不如數(shù)據(jù)表掃描,全部掃描一遍,把符合條件數(shù)據(jù)找出來。
  雖然 SQL 2005 以后的版本中已經(jīng)不在提 BOOKMARK LOOKUP了(但實際上卻是換湯不換藥),我們的很多搜索都是使用如下的搜索過程:先在非聚集中找,然后再在聚集索引中找。如下圖。
         
  非聚集索引 ( Unclustered Index)  
  ·        非聚集索引的頁,不是數(shù)據(jù),而是指向數(shù)據(jù)頁的頁。
  ·        若未指定索引類型,則默認(rèn)為非聚集索引
  ·        葉節(jié)點頁的次序和表的物理存儲次序不同
  ·        每個表最多可以有 249個非聚集索引(一般認(rèn)為每個表不應(yīng)該超過10個索引)
  ·        在非聚集索引創(chuàng)建之前創(chuàng)建聚集索引(否則會引發(fā)索引重建)
  聚集索引與非聚集索引使用的情況:
 動作描述
使用聚集索引 
 使用非聚集索引
 外鍵列
 應(yīng)
 應(yīng)
 主鍵列
 應(yīng)
 應(yīng)
 列經(jīng)常被分組排序(order by)
 應(yīng)
 應(yīng)
 返回某范圍內(nèi)的數(shù)據(jù)
 應(yīng)
 不應(yīng)
 小數(shù)目的不同值
 應(yīng)
 不應(yīng)
 大數(shù)目的不同值
 不應(yīng)
 應(yīng)
 頻繁更新的列
 不應(yīng) 
 應(yīng)
 頻繁修改索引列
 不應(yīng)
 應(yīng)
 一個或極少不同值
 不應(yīng)
 不應(yīng)
  今天就普及一下索引的一些基本知識,明天來說明怎么選擇要創(chuàng)建索引的列,條件是什么,方法是什么。

樂發(fā)網(wǎng)超市批發(fā)網(wǎng)提供超市貨源信息,超市采購進(jìn)貨渠道。超市進(jìn)貨網(wǎng)提供成都食品批發(fā),日用百貨批發(fā)信息、微信淘寶網(wǎng)店超市采購信息和超市加盟信息.打造國內(nèi)超市采購商與批發(fā)市場供應(yīng)廠商搭建網(wǎng)上批發(fā)市場平臺,是全國批發(fā)市場行業(yè)中電子商務(wù)權(quán)威性網(wǎng)站。

本文內(nèi)容整合網(wǎng)站:百度百科知乎淘寶平臺規(guī)則

本文來源: SQL Server 查詢性能優(yōu)化——創(chuàng)建索引原則(一)

分享與收藏:  網(wǎng)商學(xué)院搜索  告訴好友  關(guān)閉窗口  打印本文 本文關(guān)鍵字:
 
更多..資源下載
獨(dú)立商城圖文
獨(dú)立商城網(wǎng)商學(xué)院推薦
獨(dú)立商城點擊排行
 
手機(jī)版 手機(jī)掃描訪問
欧洲精品一区二区三区久久_无码内射中文字幕岛国片_国产精品99久久免费黑人人妻_人人爽人人av_伊人再见免费在线观看高清版 _成年人黄色片视频_免费看欧美一级片_国产极品尤物在线_久久久999免费视频_亚洲激情免费视频_免费成人深夜夜行网站视频_91aaa精品
男女高潮又爽又黄又无遮挡| 亚洲熟妇国产熟妇肥婆| 丰满少妇久久久| 91视频福利网| 天天综合网日韩| 欧美成人黑人猛交| 久久久久久久久久久视频| 草草草视频在线观看| 9l视频自拍9l视频自拍| 三级黄色片播放| 国内自拍第二页| 国产又黄又猛的视频| 三级a三级三级三级a十八发禁止| 国产l精品国产亚洲区久久| 香港三级韩国三级日本三级| 毛片在线视频播放| 91av资源网| 日韩欧美xxxx| 最近中文字幕一区二区| 日本xxxx黄色| 做a视频在线观看| 欧洲在线免费视频| 亚洲天堂av一区二区三区| av动漫免费观看| 91精品国产吴梦梦| 国产精品日韩三级| 日韩网站在线免费观看| 狠狠97人人婷婷五月| 18岁视频在线观看| 亚洲综合av在线播放| 五月天婷婷在线观看视频| 亚洲美女自拍偷拍| 韩国无码av片在线观看网站| 成人在线播放网址| av动漫在线看| 国产嫩草在线观看| 精品亚洲视频在线| 超级碰在线观看| 亚欧无线一线二线三线区别| 99草草国产熟女视频在线| 中文字幕22页| 亚洲中文字幕无码一区二区三区| 国产精品专区在线| 国产精品igao| 精品91一区二区三区| av网站手机在线观看| 成人精品视频一区二区| 日日干日日操日日射| 91成人在线视频观看| 黄页网站大全在线观看| av视屏在线播放| 日本成人xxx| 91丨porny丨探花| 欧美婷婷精品激情| 大地资源网在线观看免费官网| 日韩av三级在线| 岛国av免费在线| 国产va亚洲va在线va| 999精品视频在线| 香蕉视频免费版| 92看片淫黄大片一级| 欧美国产在线一区| 精品人妻一区二区三区四区在线| 污网站在线免费| 欧美男女爱爱视频| 色www免费视频| 久久久久久免费看| 亚洲综合20p| 国产a级一级片| 国产成人三级视频| 久久午夜夜伦鲁鲁一区二区| 国产亚洲精品久久久久久久| 久久久国产欧美| 日韩精品一区二区免费| 日本不卡一区二区在线观看| www..com日韩| 国产又粗又硬又长| 亚洲综合在线网站| 高清欧美精品xxxxx| 亚洲第一区第二区第三区| 欧美 国产 综合| 国产日韩第一页| 天天干天天爽天天射| 欧美大片在线播放| 国产成人精品免费看在线播放| 久久人妻精品白浆国产| 97在线免费视频观看| 国产一级片自拍| jizzjizzxxxx| 国产真实老熟女无套内射| 天天摸天天舔天天操| 亚洲中文字幕久久精品无码喷水| 国产毛片久久久久久国产毛片 | 日本国产在线播放| 一级黄色免费在线观看| 蜜桃免费在线视频| 黄在线观看网站| 男女日批视频在线观看| 日本一级淫片演员| 国产成人美女视频| 能看的毛片网站| 欧美 日韩 激情| 波多野结衣av一区二区全免费观看| 在线观看免费视频污| 我要看一级黄色大片| 蜜臀久久99精品久久久酒店新书| 日日摸日日碰夜夜爽无码| 人妻无码一区二区三区四区| 北条麻妃亚洲一区| 小早川怜子一区二区三区| 深夜黄色小视频| 人人爽人人av| 成人在线观看黄| 国产日韩一区二区在线| 日韩欧美一区三区| 男女激情无遮挡| 男女猛烈激情xx00免费视频| 人妻互换免费中文字幕| 黄色网络在线观看| 免费国产成人看片在线| 女女同性女同一区二区三区按摩| 99视频在线观看视频| 亚洲一区二区在线视频观看| 日韩欧美国产片| 午夜啪啪小视频| 亚洲视频在线不卡| 久久av秘一区二区三区| 国产美女视频免费| 肉大捧一出免费观看网站在线播放 | 国产精品嫩草影院8vv8| 国产无遮挡猛进猛出免费软件| 91高清国产视频| 特级黄色片视频| 精品日韩在线播放| 男人天堂新网址| 水蜜桃色314在线观看| 久久久999视频| 日本久久精品一区二区| 一区二区xxx| 男人午夜视频在线观看| 91xxx视频| 日韩伦理在线免费观看| 成年人视频观看| 激情五月婷婷久久| 久久成年人网站| 亚洲色图都市激情| 成人性生活视频免费看| 黄色片久久久久| 成人综合久久网| 无码人妻aⅴ一区二区三区日本| 久久久久久久9| 日韩av播放器| 亚洲精品乱码久久久久久动漫| 蜜臀av性久久久久蜜臀av| 日本欧美黄色片| 一区二区三区 欧美| 偷拍盗摄高潮叫床对白清晰| 大陆av在线播放| 久久国产色av免费观看| 手机在线视频一区| 日韩国产一级片| 国产视频1区2区3区| 日本a在线天堂| 熟女少妇精品一区二区| 日本女人高潮视频| 久久免费视频3| www.欧美激情.com| 精品久久久久久久久久中文字幕| 蜜桃免费在线视频| 青青视频免费在线| 动漫av免费观看| 三级在线免费观看| 国产精品无码av无码| 超级碰在线观看| 黄色av免费在线播放| 日韩在线视频在线| 国产一区二区在线免费播放| 人妻互换免费中文字幕| 国产wwwxx| 亚洲精品久久久久久久蜜桃臀| 999精彩视频| 人妻无码久久一区二区三区免费| 性欧美videossex精品| 又大又硬又爽免费视频| 污污网站在线观看视频| 国产成人无码精品久久久性色| 成人免费黄色av| 久热免费在线观看| 国产毛片久久久久久国产毛片| 欧美美女一级片| 欧美性大战久久久久xxx| 粉嫩av一区二区三区天美传媒 | 欧美第一页浮力影院| 男女啪啪免费视频网站| 奇米777在线视频| 国产黄色特级片| 青青在线视频免费观看| 男生操女生视频在线观看 | 精品嫩模一区二区三区| 亚洲娇小娇小娇小|