天天看點

索引、視圖、存儲過程和觸發器的應用

實驗案例一:驗證索引的作用

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也可以檢視到相關表的資訊

索引、視圖、存儲過程和觸發器的應用