同桌上课用手指进去了好爽_欧美丰满熟妇xxⅹⅹ性大i_成人av天天日天天拍拍_猛男gay帅男gay男男同志_欧美va天堂在线观看_人妻无码av中文系列三里桃花_亚欧免费无码在线观看_久久久精品国产亚洲av水_日韩在线免费看污污污_2021无码专区人妻系列日韩

首頁 優(yōu)化推廣 詳解SQL Server數(shù)據(jù)庫索引

詳解SQL Server數(shù)據(jù)庫索引

來源: | 時(shí)間:2013/6/10 23:56:44 |

一、索引的概念

索引就是加快檢索表中數(shù)據(jù)的方法。數(shù)據(jù)庫的索引類似于書籍的索引。在書籍中,索引允許用戶不必翻閱完整個(gè)書就能迅速地找到所需要的信息。在數(shù)據(jù)庫中,索引也允許數(shù)據(jù)庫程序迅速地找到表中的數(shù)據(jù),而不必掃描整個(gè)數(shù)據(jù)庫。

二、索引的特點(diǎn)

1.索引可以加快數(shù)據(jù)庫的檢索速度

2.索引降低了數(shù)據(jù)庫插入、修改、刪除等維護(hù)任務(wù)的速度

3.索引創(chuàng)建在表上,不能創(chuàng)建在視圖上

4.索引既可以直接創(chuàng)建,也可以間接創(chuàng)建

5.可以在優(yōu)化隱藏中,使用索引

6.使用查詢處理器執(zhí)行SQL語句,在一個(gè)表上,一次只能使用一個(gè)索引

7.其他

三、索引的優(yōu)點(diǎn)

1.創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性

2.大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因

3.加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。

4.在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組和排序的時(shí)間。

5.通過使用索引,可以在查詢的過程中使用優(yōu)化隱藏器,提高系統(tǒng)的性能。

四、索引的缺點(diǎn)

1.創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù)量的增加而增加

2.索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會(huì)更大

3.當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度

五、索引分類

1.直接創(chuàng)建索引和間接創(chuàng)建索引

直接創(chuàng)建索引: CREATE INDEX mycolumn_index ON mytable (myclumn)

間接創(chuàng)建索引:定義主鍵約束或者唯一性鍵約束,可以間接創(chuàng)建索引

2.普通索引和唯一性索引

普通索引:

CREATE INDEX mycolumn_index ON mytable (myclumn)

唯一性索引:保證在索引列中的全部數(shù)據(jù)是唯一的,對(duì)聚簇索引和非聚簇索引都可以使用

 

CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

 

 

3.單個(gè)索引和復(fù)合索引

單個(gè)索引:即非復(fù)合索引

復(fù)合索引:又叫組合索引,在索引建立語句中同時(shí)包含多個(gè)字段名,最多16個(gè)字段

 

CREATE INDEX name_index ON username(firstname,lastname)

 

 

4.聚簇索引和非聚簇索引(聚集索引,群集索引)

聚簇索引:物理索引,與基表的物理順序相同,數(shù)據(jù)值的順序總是按照順序排列

CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH

ALLOW_DUP_ROW(允許有重復(fù)記錄的聚簇索引)

非聚簇索引:

 

CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

 

 

六、索引的使用

1.當(dāng)字段數(shù)據(jù)更新頻率較低,查詢使用頻率較高并且存在大量重復(fù)值是建議使用聚簇索引

2.經(jīng)常同時(shí)存取多列,且每列都含有重復(fù)值可考慮建立組合索引

3.復(fù)合索引的前導(dǎo)列一定好控制好,否則無法起到索引的效果。如果查詢時(shí)前導(dǎo)列不在查詢條件中則該復(fù)合索引不會(huì)被使用。前導(dǎo)列一定是使用最頻繁的列

4.多表操作在被實(shí)際執(zhí)行前,查詢優(yōu)化器會(huì)根據(jù)連接條件,列出幾組可能的連接方案并從中找出系統(tǒng)開銷最小的最佳方案。連接條件要充份考慮帶有索引的表、行數(shù)多的表;內(nèi)外表的選擇可由公式:外層表中的匹配行數(shù)×內(nèi)層表中每一次查找的次數(shù)確定,乘積最小為最佳方案

5.where子句中對(duì)列的任何操作結(jié)果都是在sql運(yùn)行時(shí)逐列計(jì)算得到的,因此它不得不進(jìn)行表搜索,而沒有使用該列上面的索引;如果這些結(jié)果在查詢編譯時(shí)就能得到,那么就可以被sql優(yōu)化器優(yōu)化,使用索引,避免表搜索。

例:

 

Select × from record where substring(card_no,1,4)=’5378’ 
&& Select × from record where card_no like ’5378%’

 

 

任何對(duì)列的操作都將導(dǎo)致表掃描,它包括數(shù)據(jù)庫函數(shù)、計(jì)算表達(dá)式等等,查詢時(shí)要盡可能將操作移至等號(hào)右邊

6.where條件中的’in’在邏輯上相當(dāng)于’or’,所以語法分析器會(huì)將in ('0','1')轉(zhuǎn)化為column='0' or column='1'來執(zhí)行。我們期望它會(huì)根據(jù)每個(gè)or子句分別查找,再將結(jié)果相加,這樣可以利用column上的索引;但實(shí)際上它卻采用了"or策略",即先取出滿足每個(gè)or子句的行,存入臨時(shí)數(shù)據(jù)庫的工作表中,再建立唯一索引以去掉重復(fù)行,最后從這個(gè)臨時(shí)表中計(jì)算結(jié)果。因此,實(shí)際過程沒有利用column上索引,并且完成時(shí)間還要受tempdb數(shù)據(jù)庫性能的影響。in、or子句常會(huì)使用工作表,使索引失效;如果不產(chǎn)生大量重復(fù)值,可以考慮把子句拆開;拆開的子句中應(yīng)該包含索引

7.要善于使用存儲(chǔ)過程,它使sql變得更加靈活和高效

 

一、理解索引的結(jié)構(gòu)

  索引在數(shù)據(jù)庫中的作用類似于目錄在書籍中的作用,用來提高查找信息的速度。使用索引查找數(shù)據(jù),無需對(duì)整表進(jìn)行掃描,可以快速找到所需數(shù)據(jù)。微軟的SQL SERVER提供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。

  SQL Server 中數(shù)據(jù)存儲(chǔ)的基本單位是頁(Page)。數(shù)據(jù)庫中的數(shù)據(jù)文件(.mdf 或 .ndf)分配的磁盤空間可以從邏輯上劃分成頁(從 0 到 n 連續(xù)編號(hào))。磁盤 I/O 操作在頁級(jí)執(zhí)行。也就是說,SQL Server 每次讀取或?qū)懭霐?shù)據(jù)的最少數(shù)據(jù)單位是數(shù)據(jù)頁。

  下面我們先簡(jiǎn)單的了解一下索引的體系結(jié)構(gòu):

  1. 聚集索引結(jié)構(gòu)

  在 SQL Server 中,索引是按 B 樹結(jié)構(gòu)進(jìn)行組織的。

  聚集索引單個(gè)分區(qū)中的結(jié)構(gòu):

  

詳解SQLServer數(shù)據(jù)庫索引
 

 

 

 

  --建立UserAddDate聚集索引

  CREATE CLUSTERED INDEX [IX_UserAddDate] ON [ASPNet_zSurvey].[ZS_User]

  (

  [UserAddDate] ASC

  )

  聚集索引(Clustered Index)特點(diǎn)

  聚集索引的葉節(jié)點(diǎn)就是實(shí)際的數(shù)據(jù)頁

  聚集索引中的排序順序僅僅表示數(shù)據(jù)頁鏈在邏輯上是有序的。而不是按照順序物理的存儲(chǔ)在磁盤上

  行的物理位置和行在索引中的位置是相同的

  每個(gè)表只能有一個(gè)聚集索引

  聚集索引的平均大小大約為表大小的5%左右

  2.非聚集索引結(jié)構(gòu)

  非聚集索引與聚集索引具有相同的 B 樹結(jié)構(gòu),它們之間的顯著差別在于以下兩點(diǎn):

  1. 基礎(chǔ)表的數(shù)據(jù)行不按非聚集鍵的順序排序和存儲(chǔ)。

  2. 非聚集索引的葉層是由索引頁而不是由數(shù)據(jù)頁組成。

  下圖示意了單個(gè)分區(qū)中的非聚集索引結(jié)構(gòu):

  

    詳解SQLServer數(shù)據(jù)庫索引
    TAG:高端網(wǎng)站建設(shè)高端網(wǎng)站設(shè)計(jì)網(wǎng)站制作網(wǎng)站建設(shè)

    服務(wù)熱線

    153 8323 9821

    功能和特性

    價(jià)格和優(yōu)惠

    網(wǎng)站和維護(hù)

    推廣和優(yōu)化

    微信服務(wù)號(hào)