SQLServer教程 索引

2022-03-31 01:12:56 字數 3231 閱讀 7657

索引

索引提供指標以指向儲存在表中指定列的資料值,然後根據指定的排列次序排列這些指標。資料庫使用索引的方式與使用書的目錄很相似:通過搜尋索引找到特定的值,然後跟隨指標到達包含該值的行。

一、什麼是索引

資料庫中的索引與書籍中的目錄類似,在一本書中,利用目錄可以快速查詢所需資訊,無須閱讀整本書。在資料庫中,索引使資料庫程式無須對整個表進行掃瞄,就可以在其中找到所需資料。書中的目錄是乙個詞語列表,其中註明了包含各個詞的頁碼。而資料庫中的索引是某個表中一列或者若干列值的集合,以及相應的指向表中物理標識這些值的資料頁的邏輯指標清單。

● 索引:它是sql server編排資料的內部方法,為sql server提供一種方法來編排查詢資料的路徑,相當於漢語字(詞)典中按拼音或筆畫排序的目錄。

● 索引頁:資料庫中儲存索引的資料頁。索引頁存放檢索資料行的關鍵字頁以及該資料行的位址指標。索引頁類似於漢語字(詞)典中按拼音或筆畫排序的目錄頁。

索引的作用是通過使用索引,可以大大提高資料庫的檢索速度,改善資料庫效能。

索引可分為以下3類。

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

如果現有資料中存在重複的鍵值,則一般情況下大多數資料庫都不允許建立唯一索引。當新資料使表中的鍵值重複時,資料庫也拒絕接收此資料。例如,如果在stulnfo表中的學員身份證號(stuid)列上建立了唯一索引,則所有學員的身份證號不能重複。wangyexx.com

● 主鍵索引:在資料庫關係圖中為表定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。主鍵索引要求主鍵中的每個值是唯一的。當在查詢中使用主鍵索引時,它還允許快速訪問資料。

● 聚集索引:在聚集索引中,表中各行的物理順序與鍵值的邏輯(索引)順序相同。表只能包含乙個聚集索引。例如,漢語字(詞)典預設按拼音排序編排字典中的每頁頁碼。拼音字母a、b、c、d、…、x、y、z就是索引的邏輯順序,而頁碼1、2、3…就是物理順序。預設按拼音排序的字典,其索引順序和邏輯順序是一致的,即拼音順序較後的字(詞)對應的頁碼也較大,如拼音「ha」對應的字(詞)頁碼就比拼音「ba」對應的字(詞)頁碼靠後。

如果不是聚集索引,則表中各行的物理順序與鍵值的邏輯順序不匹配。聚集索引比非聚集索引有更快的資料訪問速度。例如,按筆畫排序的索引就是非聚集索引,「1」畫的字(詞)對應的頁碼可能比「3」畫的字(詞)對應的頁碼大(靠後)。

二、如何建立索引

建立索引的方法有兩種:使用microsoft sql server management studio和t-sql語句。

1.使用microsoft sqlserver management studio建立索引

在表的設計檢視巾,單擊滑鼠右鍵,在彈出的快捷選單中選擇「索引/鍵」命令,然後單擊「新增」按鈕建立索引,如圖1所示。您可以選擇索引列、指定索引的型別:unique(唯一索引)、clustered(聚集索引)以及填充因子(指定每個索引頁的填滿程度,一般很少指定),這些選項的具體含義還可以通過單擊「幫助」按鈕檢視幫助。

圖1 使用microsoft sql server management studio建立索引

2.使用t-sql語句建立索引

建立索引的語法如下:

create

[unique][

clustered | nonclustered

]index

index_name

on table_name (column_name[

, column_name

]...)

[with

fillfactor=x

]

view code

其中,● unique指定唯一索引,可選。

● clustered、nonclustered指定是聚集索引還是非聚集索引,可選。

● fillfactor表示填充因子,指定乙個o~100的值,該值指示索引頁填滿的空間所佔的百分比。

因為成績表stumarks中的筆試列(writtenexam)經常被查詢,為了加快查詢速度,現建立索引。由於筆試成績可能會重複,索引只能建立非聚集索引,t-sql語句如示例1所示。

示例1:

use

studb

go/*

--檢測是否存在該索引(索引存放在系統表sysindexes中)----

*/if

exists (select name from

sysindexes

where name =

'ix_stumarks_writtenexam')

drop

index stumarks.ix_stumarks_writtenexam --

刪除索引

/*--筆試列建立聚集索引:填充因子為30%--

*/create

nonclustered

index

ix_stumarks_writtenexam

onstumarks(writtenexam)

with

fillfactor=30

go

view code

建立索引後,可以像查詢字詞一樣,選擇拼音查詢方式或筆畫查詢方式。也可以指定sql server資料查詢的查詢方式,如示例2所示。

示例2:

/*

--指定按索引:ix_stumarks_writtenexam查詢--

*/select

*from

stumarks

(index

=ix_stumarks_writtenexam)

where writtenexam between

60and

90

view code

雖然我們可以指定sql server按哪個索引進行資料查詢,但一般不需要手動指定。sql server將會根據所建立的索引,自動優化查詢。

使用索引可加快資料檢索速度,但為每個欄位都建立索引是沒有必要的,因為索引自身也需要維護,並占用一定的磁碟空間,可以按照下列標準選擇建立索引的列。

● 該列用於頻繁搜尋。

● 該列用於對資料進行排序。

請不要對下面的列建立索引。

● 列中僅包含幾個不同的值。

● 表中僅包含幾行。為小型表建立索引可能不太划算,因為sql server在索引中搜尋資料所花的時間比在表中逐行搜尋所花的時間更長。

索引教程 PHP教程索引

索引教程 introduction to php php簡介 installing php to linux 將php安裝到linux installing php to windows 將php安裝到windows php hello world project with eclipse 帶有ec...

SQL Server建立索引

什麼是索引 拿漢語字典的目錄頁 索引 打比方 正如漢語字典中的漢字按頁存放一樣,sql server中的資料記錄也是按頁存放的,每頁容量一般為4k 為了加快查詢的速度,漢語字 詞 典一般都有按拼音 筆畫 偏旁部首等排序的目錄 索引 我們可以選擇按拼音或筆畫查詢方式,快速查詢到需要的字 詞 同理,sq...

SQL Server建立索引

什麼是索引 拿漢語字典的目錄頁 索引 打比方 正如漢語字典中的漢字按頁存放一樣,sql server中的資料記錄也是按頁存放的,每頁容量一般為4k 為了加快查詢的速度,漢語字 詞 典一般都有按拼音 筆畫 偏旁部首等排序的目錄 索引 我們可以選擇按拼音或筆畫查詢方式,快速查詢到需要的字 詞 同理,sq...