sql索引型別

2021-07-14 04:03:23 字數 3179 閱讀 4303

索引型別

唯一索引:唯一索引不允許兩行具有相同的索引值

主鍵索引:為表定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。主鍵索引要求主鍵中的每個值是唯一的,並且不能為空

聚集索引(clustered):表中各行的物理順序與鍵值的邏輯(索引)順序相同,每個表只能有乙個

非聚集索引(non-clustered):非聚集索引指定表的邏輯順序。資料儲存在乙個位置,索引儲存在另乙個位置,索引中包含指向資料儲存位置的指標。可以有多個,小於249個 優點

加快訪問速度

加強行的唯一性

缺點帶索引的表在資料庫中需要更多的儲存空間

操縱資料的命令需要更長的處理時間,因為它們需要對索引進行更新

請按照下列標準選擇建立索引的列。

該列用於頻繁搜尋

該列用於對資料進行排序 一、

索引的概念

索引就是加快檢索表中資料的方法。資料庫的

索引類似於書籍的

索引。在書籍中,

索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,

索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。 二、

索引的特點 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變得更加靈活和高效

SQL 索引 建立索引

create index 語句用於在表中建立索引。在不讀取整個表的情況下,索引使資料庫應用程式可以更快地查詢資料。您可以在表中建立索引,以便更加快速高效地查詢資料。使用者無法看到索引,它們只能被用來加速搜尋 查詢。注釋 更新乙個包含索引的表需要比更新乙個沒有索引的表更多的時間,這是由於索引本身也需要...

SQL優化(SQL 索引)

檢視表定義 show create table users 檢視表的索引 show index from users 你要獲取第乙個表的所有資訊,你說全表掃瞄快呢還是索引掃瞄快呢?所以當你查詢庫 包括left join中的臨時庫 的所有資訊時,資料庫會選擇最優方法 全表掃瞄!s表dept id na...

Oracle索引 索引型別

oracle 提供了多種不同型別的索引以供使用。簡單地說,oracle 中包括如下索引 b 樹索引 這些是我所說的 傳統 索引。到目前為止,這是 oracle 和大多數其他資料庫中最常用的索引。b 樹的構造類似於二叉樹,能根據鍵提供一行或乙個行集的快速訪問,通常只需很少的讀操作就能找到正確的行。不過...