MS SQL資料庫索引的應用

2021-09-05 18:28:15 字數 4541 閱讀 1290

一、索引的概念

索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。

(正常沒有檢索的話 在表裡找資料,是要在所有資料中找 符合條件的資料,有索引的話,直接根據索引能找到符合條件的資料 而不必在所有資料裡找)(他並不是提高了資料庫檢索速度,而是定義好了乙個目錄,所以索引鍵的設定是選擇最適合做索引內容的字段,一般為查詢條件,它實際就是象一本書的目錄中的一條總結性語言作為目錄指定頁數,也就是說,如果查詢的內容和目錄無關,那他就失去作用了)

二、索引的特點

1.索引可以加快資料庫的檢索速度

2.索引降低了資料庫插入、修改、刪除等維護任務的速度

3.索引建立在表上,不能建立在檢視上

4.索引既可以直接建立,也可以間接建立

5.可以在優化隱藏中,使用索引

6.使用查詢處理器執行sql語句,在乙個表上,一次只能使用乙個索引

7.其他

三、索引的優點

1.建立唯一性索引,保證資料庫表中每一行資料的唯一性

2.大大加快資料的檢索速度,這也是建立索引的最主要的原因

3.加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。

4.在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。

5.通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的效能。

四、索引的缺點

1.建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加

2.索引需要佔物理空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大

3.當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,降低了資料的維護速度

五、索引分類

1.直接建立索引和間接建立索引

直接建立索引: create index mycolumn_index on mytable (myclumn)

間接建立索引:定義主鍵約束或者唯一性鍵約束,可以間接建立索引

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

普通索引:

create index mycolumn_index on mytable (myclumn)

唯一性索引:保證在索引列中的全部資料是唯一的,對聚簇索引和非聚簇索引都可以使用

create unique coustered index myclumn_cindex on mytable(mycolumn)

3.單個索引和復合索引

單個索引:即非復合索引

復合索引:又叫組合索引,在索引建立語句中同時包含多個欄位名,最多16個字段

create index name_index on username(firstname,lastname)

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

聚簇索引:物理索引,與基表的物理順序相同,資料值的順序總是按照順序排列

create clustered index mycolumn_cindex on mytable(mycolumn) with

allow_dup_row(允許有重覆記錄的聚簇索引)

非聚簇索引:

create unclustered index mycolumn_cindex on mytable(mycolumn)

六、索引的使用

1.當欄位資料更新頻率較低,查詢使用頻率較高並且存在大量重複值是建議使用聚簇索引

2.經常同時訪問多列,且每列都含有重複值可考慮建立組合索引

3.復合索引的前導列一定好控制好,否則無法起到索引的效果。如果查詢時前導列不在查詢條件中則該復合索引不會被使用。前導列一定是使用最頻繁的列

4.多表操作在被實際執行前,查詢優化器會根據連線條件,列出幾組可能的連線方案並從中找出系統開銷最小的最佳方案。連線條件要充份考慮帶有索引的表、行數多的表;內外表的選擇可由公式:外層表中的匹配行數*內層表中每一次查詢的次數確定,乘積最小為最佳方案

5.where子句中對列的任何操作結果都是在sql執行時逐列計算得到的,因此它不得不進行表搜尋,而沒有使用該列上面的索引;如果這些結果在查詢編譯時就能得到,那麼就可以被sql優化器優化,使用索引,避免表搜尋。

例:

select * from record where substring(card_no,1,4)=』5378』

&& select * from record where card_no like 』5378%』

任何對列的操作都將導致表掃瞄,它包括資料庫函式、計算表示式等等,查詢時要盡可能將操作移至等號右邊

6.where條件中的』in』在邏輯上相當於』or』,所以語法分析器會將in ('0','1')轉化為column='0' or column='1'來執行。我們期望它會根據每個or子句分別查詢,再將結果相加,這樣可以利用column上的索引;但實際上它卻採用了"or策略",即先取出滿足每個or子句的行,存入臨時資料庫的工作表中,再建立唯一索引以去掉重複行,最後從這個臨時表中計算結果。因此,實際過程沒有利用column上索引,並且完成時間還要受tempdb資料庫效能的影響。in、or子句常會使用工作表,使索引失效;如果不產生大量重複值,可以考慮把子句拆開;拆開的子句中應該包含索引

7.要善於使用儲存過程,它使sql變得更加靈活和高效

「聚集索引」與「非聚集索引」的理解很簡單:「聚集索引」就是物理上的排列方式,而「非聚集索引」是使用索引表(相當於書的目錄),使用索引之所以能提高效能,也就是「避免全表掃瞄」。

因此乙個表只能有乙個「聚集索引」,因為在物理上,不可能會有「兩種」物理存放方式吧。也真是如此「聚集索引」對查詢效能的影響最大,所以要非常注意「聚集索引」的建立,我目前意識到、也是freedk所推薦的「單據日期」作為聚集索引,我說的「單據日期」是指日常業務性的記錄,一般都是會有乙個日期欄位的,而80%查詢中都會用到此"日期字段",而且把它放在where的第乙個效果最佳,因為會在指定的區域內進行其他條件的查詢,範圍少了很多很多,效能效果提高明顯。 

至於其他的索引,這只要根據業務的需要,對於一些會進行查詢的字段進行一定的索引,也就是盡可能的「避免全表掃瞄」就可以提高系統效能。當然過多的索引也會引起系統負擔,想想要建那麼多「目錄」自然會增加負擔了。

還有「聚集索引」由於是物理儲存的,效能上固然是提高了,但對於插入與刪除,會引起資料的「移動」(在中間插入一條記錄,會引起後半部分記錄的後移),當然資料庫有自己的儲存機制,會採用「頁」來進行分塊儲存,可以避免一定的「移動」,所以「聚集索引」最好是在「大部分」情況下可以「遞增」,我們目前採用的「單據日期」也剛好是符合這個條件的。

聚集索引---(簇索引):

1.  一張表只能包含乙個聚集索引;

2.  在聚集索引中,表中各行的物理順序與鍵值的邏輯(索引)順序相同;

3.  如果不是聚集索引,表中各行的物理順序與鍵值的邏輯順序不匹配。聚集索引比非聚集索引有更快的資料訪問速度;

4.  聚集索引通常可加快    update    和    delete    操作的速度,因為這兩個操作需要讀取大量的資料;

5.  建立或修改聚集索引可能要花很長時間,因為執行這兩個操作時要在磁碟上對錶的行進行重組;                可考慮將聚集索引用於:         

1.  包含數量有限的唯一值的列,如    state    列只包含    50    個唯一的州**。    

2.  使用下列運算子返回乙個範圍值的查詢:between、>、>=、<    和    <=。     

3.  返回大結果集的查詢。       

建立聚集索引:     

1.  在資料庫關係圖中選擇要建立索引的表,右擊該錶,然後從快捷選單中選擇"索引/鍵"命令。           

1'.  為要建立索引的表開啟表設計器,在表設計器中右擊,然後從快捷選單中選擇"索引/鍵"命令。     

2.  選擇"建立為    clustered"核取方塊。當儲存表或關係圖時,索引即建立在資料庫中。   

非聚集索引:   

1.  非聚集索引與課本中的索引類似。資料儲存在乙個地方,索引儲存在另乙個地方,索引帶有指標指向資料的儲存位置;

2.  索引中的專案按索引鍵值的順序儲存,而表中的資訊按另一種順序儲存(這可以由聚集索引規定)

3.  如果在表中未建立聚集索引,則無法保證這些行具有任何特定的順序。

可考慮將非聚集索引用於: 

1.  包含大量非重複值的列,如姓氏和名字的組合(如果聚集索引用於其它列)。如果只有很少的非重複值,如只有  1  和  0,則大多數查詢將不使用索引,因為此時表掃瞄通常更有效。

2.  不返回大型結果集的查詢。

3.  返回精確匹配的查詢的搜尋條件(where  子句)中經常使用的列。

4.  經常需要聯接和分組的決策支援系統應用程式。應在聯接和分組操作中使用的列上建立多個非聚集索引,在任何外來鍵列上建立乙個聚集索引。

5.  在特定的查詢中覆蓋乙個表中的所有列。這將完全消除對錶或聚集索引的訪問。 

索引很有用喲~

在查詢成本中最好不要出現大於0.1的成本,如果出現大於1.0幾的那就危險了~

MS SQL入門基礎 資料庫索引

使用者對資料庫最頻繁的操作是進行資料查詢。一般情況下,資料庫在進行查詢操作時需要對整個表進行資料搜尋。當表中的資料很多時,搜尋資料就需要很長的時間,這就造成了伺服器的資源浪費。為了提高檢索資料的能力,資料庫引入了索引機制。本章將介紹索引的概念及其建立與管理。8.1.1 索引的概念 索引是乙個單獨的 ...

資料庫索引應用

資料庫索引應用 一 索引的概念 索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。二 索引的特點 1.索引可以加快資料庫的檢索速度 2.索引降低...

資料庫索引應用

索引的概念 索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。二 索引的特點 1.索引可以加快資料庫的檢索速度 2.索引降低了資料庫插入 修改 ...