索引
索引提供指針以指向存儲在表中指定列的數據值,然后根據指定的排列次序排列這些指針。 數據庫 使用索引的方式與使用書的目錄很相似:通過搜索索引找到特定的值,然后跟隨指針到達包含該值的行。
一、什么是索引
數據庫中的索引與書籍中的目錄類似,在一本書中,利用目錄可以快速查找所需信息,無須閱讀整本書。在數據庫中,索引使數據庫程序無須對整個表進行掃描,就可以在其中找到所需數據。書中的目錄是一個詞語列表,其中注明了包含各個詞的頁碼。而數據庫中的索引是某個表中一列或者若干列值的集合,以及相應的指向表中物理標識這些值的數據頁的邏輯指針清單。
● 索引:它是SQL Server編排數據的內部方法,為SQL Server提供一種方法來編排查詢數據的路徑,相當于漢語字(詞)典中按拼音或筆畫排序的目錄。
● 索引頁:數據庫中存儲索引的數據頁。索引頁存放檢索數據行的關鍵字頁以及該數據行的地址指針。索引頁類似于漢語字(詞)典中按拼音或筆畫排序的目錄頁。
索引的作用是通過使用索引,可以大大提高數據庫的檢索速度,改善數據庫性能。
索引可分為以下3類。
● 唯一索引:唯一索引不允許兩行具有相同的索引值。
如果現有數據中存在重復的鍵值,則一般情況下大多數數據庫都不允許創建唯一索引。當新數據使表中的鍵值重復時,數據庫也拒絕接收此數據。例如,如果在stulnfo表中的學員身份證號(stuID)列上創建了唯一索引,則所有學員的身份證號不能重復。 WANGYEXX.COM
提示:創建了唯一約束,將自動創建唯一索引。盡管唯一索引有助于找到信息,但為了獲得最佳性能,建議使用主鍵約束。
● 主鍵索引:在數據庫關系圖中為表定義一個主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個值是唯一的。當在查詢中使用主鍵索引時,它還允許快速訪問數據。
● 聚集索引:在聚集索引中,表中各行的物理順序與鍵值的邏輯(索引)順序相同。表只能包含一個聚集索引。例如,漢語字(詞)典默認按拼音排序編排字典中的每頁頁碼。拼音字母a、b、c、d、…、x、y、z就是索引的邏輯順序,而頁碼1、2、3…就是物理順序。默認按拼音排序的字典,其索引順序和邏輯順序是一致的,即拼音順序較后的字(詞)對應的頁碼也較大,如拼音“ha”對應的字(詞)頁碼就比拼音“ba”對應的字(詞)頁碼靠后。
如果不是聚集索引,則表中各行的物理順序與鍵值的邏輯順序不匹配。聚集索引比非聚集索引有更快的數據訪問速度。例如,按筆畫排序的索引就是非聚集索引,“1”畫的字(詞)對應的頁碼可能比“3”畫的字(詞)對應的頁碼大(靠后)。
提示:在SQL Server中,一個表只能創建一個聚集索引,但可以有多個非聚集索引。設置某列為主鍵,該列就默認為聚集索引。
二、如何創建索引
創建索引的方法有兩種:使用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
]
其中,
● 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
ON
stuMarks(writtenExam)
WITH
FILLFACTOR
=
30
GO
創建索引后,可以像查找字詞一樣,選擇拼音查找方式或筆畫查找方式。也可以指定SQL Server數據查詢的查詢方式,如示例2所示。
示例2: ?

/*
--指定按索引:IX_stuMarks_writtenExam查詢--
*/
SELECT
*
FROM
stuMarks (
INDEX
=
IX_stuMarks_writtenExam)
WHERE
writtenExam
BETWEEN
60
AND
90
雖然我們可以指定SQL Server按哪個索引進行數據查詢,但一般不需要手動指定。SQL Server將會根據所創建的索引,自動優化查詢。 使用索引可加快數據檢索速度,但為每個字段都建立索引是沒有必要的,因為索引自身也需要維護,并占用一定的磁盤空間,可以按照下列標準選擇建立索引的列。 ● 該列用于頻繁搜索。 ● 該列用于對數據進行排序。 請不要對下面的列創建索引。 ● 列中僅包含幾個不同的值。 ● 表中僅包含幾行。為小型表創建索引可能不太劃算,因為SQL Server在索引中搜索數據所花的時間比在表中逐行搜索所花的時間更長。 |
轉載請注明原文地址: http://www.wangyexx.com/db/sqlbasic/1461.html |
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
