實驗案例一:驗證索引的作用
1、首先建立一個資料量大的表,名稱為“學生表”,分别有三列,學号,姓名和班級,如下圖所示,學号為自動編号,班級為預設值“一班”。
2、向表中插入大量資料,資料越多,驗證索引的效果越好。
使用語句完成:While 1>0 Insert into 學生表(姓名) values(‘于美麗’)
上面語句是一個死循環,除非強制結束,如果1大于0就會一直向表中插入姓名
如下圖所示:
等待5分鐘左右,打開表的屬性,檢視表的行數,目前為1032363,如下圖所示:
3、 使用語句查詢第900000行的資料,Select * from 學生表 Where 學号=900000
4、打開“sql server profiler ”工具進行跟蹤,如下圖所示:
打開“sql server profiler ”工具檢視跟蹤的資訊,發現查詢時間很長,cpu工作了265毫秒,reads:讀了8649次,writes:寫了10次,duration:總計花費2336毫秒完成查詢。
為了下面分析檔案更準确,多執行幾次Select* from 學生表 Where 學号=900000
然後把跟蹤的結果儲存在桌面上:
5、打開“資料庫引擎優化顧問”,添加跟蹤檔案,進行分析,發現索引建議,需要建立索引。
注意選擇benet資料庫中的學生表,然後點選“開始分析”
索引類型為clusterd(聚集索引),索引列為“學号”。
6、按照“資料庫引擎優化顧問”的索引建議建立聚集索引,并且選擇“唯一”
7、再次執行Select * from 學生表Where 學号=900000
8、打開sql server profiler檢視跟蹤的時間,發現查詢時間大幅提升,說明索引可以提高查詢速度。
發現總計時間為1毫秒,幾乎忽略不計
實驗案例二:分别練習建立各種索引
1、建立聚集索引
目前tstudent表中沒有任何索引也沒有主鍵
為tstudent表建立聚集索引
選中studentID,單擊左上側的主鍵按鈕
為Tstuden表的studentID建立主鍵就同時建立了聚集索引
2、建立組合索引
為成績表建立組合索引,因為一個學生不能為一門學科錄入兩次成績,是以将成績表中的studentID和subjectID建立組合索引
解決辦法:
菜單欄----工具----選項
找到設計器(designers),将标記處的勾去掉,單擊“确定”
這樣組合索引就建立成功了。
3、建立唯一索引
建立唯一性限制的時候就會建立唯一性索引,不能有重複值
為Tstudent表建立唯一非聚集索引
create unique nonclustered index U_cardID on TStudent(cardID)
4、建立非聚集索引---可以有重複值
為Tstudent表的姓名列建立非聚集索引
使用指令檢視表上的索引
Select * from sys.sysindexes where id=(select object_id from sys.all_objects where name='Tstudent')
Indid中1代表聚集索引
Indid中2代表唯一非聚集索引
Indidz中3代表非聚集索引
使用sp_help Tstudent也可以檢視到相關表的資訊