一、索引的概念
索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。
二、索引的特點
1.索引可以加快資料庫的檢索速度
2.索引降低了資料庫插入、修改、刪除等維護任務的速度
3.索引建立在表上,不能建立在檢視上
4.索引既可以直接建立,也可以間接建立
5.可以在優化隱藏中,使用索引
6.使用查詢處理器執行sql語句,在乙個表上,一次只能使用乙個索引
三、索引的優點
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子句常會使用工作表,使索引失效。
[img]
MS SQL 型別對應C 型別
序號 類別 sqlserver c sharp 備註 1 整數 bit boolean true 轉換為1false轉換為0 2 tinyint byte c sharp 資料型別都位於system命名空間 3 smallint int16 4 intint32 5 bigint int64 6 s...
MS SQL 資料型別
1.資料型別 資料類弄是資料的一種屬性,表示資料所表示資訊的型別。任何一種計算機語言都定義了自己的資料型別。當然,不同的程式語言都具有不同的特點,所定義的資料型別的各類和名稱都或多或少有些不同。sql server 提供了 25 種資料型別 binary n varbinary n char n v...
MS SQL 索引設計的準則
ms sql 索引設計的準則 一.經常被用來搜尋資料記錄的字段 1.primary 約束所定義的作為主鍵的字段 自動建立 2.unique約束所定義的字段 自動建立 3.foreign key 約束所定義的作為外來鍵的字段 4.在查詢中用來連線表的字段 5.經常用來作為排序基準的字段 二.索引會占用...