15/23/2008 Khoa CNTT - H qun tr c s d liu1111BÀI 10.INDEXKhoa CNTT - H qun tr c s d liu22225/23/2008Nội dung bài học Giới thiệu Index Cluster Index và NonCluster Index Quản lý Index và Heap Structures Sử dụng Index
2Khoa CNTT - H qun tr c s d liu33335/23/2008Giới thiệu Index Dữ liệu ñược lưu trữ như thế nàoCác dòng ñược lưu trữ trong các data pagesHeap là một tập hợp của các data pages củamột table Dữ liệu ñược truy xuất như thế nàoQúet hết tất cả các data pages của tableDùng một index ñể chỉ ñến dữ liệu trong mộtpageKhoa CNTT - H qun tr c s d liu44445/23/2008Giới thiệu Index Tại sao tạo indexTăng tốc ñộ truy xuất dữ liệuKhông bắt buộc tính liên tục của các dòng Khi nào không nên tạo indexTốn bộ nhớ trên ñĩa ñể lưu trữ index. Khi user cập nhật dữ liệu trên cột index, SQL Server cũngsẽ cập nhật indexViệc quản lý index sẽ tốn thời gian và tài nguyênnên nếu index không thường ñược sử dùng thìkhông cần tạo
3Khoa CNTT - H qun tr c s d liu55555/23/2008Clustered IndexMỗi table chỉ có một clustered indexThứ tự vật lý của các dòng của table và thứ tự của cácdòng trong index là giống nhau, Ta nên tạo clustered index trước khi tạo nonclustered index vì clustered index thay ñổithứ tự vật lý của các dòng trong table.Kích thước trung bình của một clustered index khoảng 5% kích thước table. Tuy nhiên kích thước này phụ thuộc vàokích thước của cột ñược indexKhi chúng ta tạo một clustered index, table sẽ ñược saochép, dữ liệu trong table sẽ ñược sắp xếp lại và table gốcsẽ bị xoá. Do vậy chúng ta phải có ñủ khoảng trống ñĩa trêndatabase ñể sao chép dữ liệu.Khoa CNTT - H qun tr c s d liu66665/23/2008Nonclustered IndexsNonclustered index hữu dụng khi user yêu cầu tìm kiếm dữliệu bằng nhiều cáchKhi tạo ra một Nonclustered index, ta cần xem xét các tiêuchí sau:Nếu kiểu index không ñược chỉ ñịnh, thì kiểu mặc nhiên lànonclustered indexSQL Server sẽ tự ñộng xây dựng lại các nonclustered indexs ñã cókhi:Một clustered index bị xoáMột clustered index ñược tạoTuỳ chọn DROP_EXISTING ñược dùng ñể thay ñổi các cột ñịnh nghĩaclustered indexCó tối ña 249 nonclustered index trong một tableTạo Clustered index trước Nonclustered index
4Khoa CNTT - H qun tr c s d liu77775/23/2008Tạo indexs, Cú phápCREATE [ UNIQUE] [CLUSTERED |NONCLUSTERED ] INDEX index_nameON { table | view }( column [ ASC | DESC ] [ , .n ] ) [ WITH DROP_EXISTING ] Sử dụng index:Select …… from …. With(index(indexName))Khoa CNTT - H qun tr c s d liu88885/23/2008Tham số (1)Unique: tạo ra một unique index CLUSTERED: tạo ra một ñối tượng clustered index, nếu clustered không ñược chỉñịnh thì nonclustered index ñược tạo raindex_name: tên của index, là duy nhất trên một table/view nhưng không cần duynhất trong databaseTable: là tên table chứa cột hoặc các cột ñược tạo index. View: là tên view ñược index. View này phải ñược ñịnh nghĩa vớiSCHEMABINDING
5Khoa CNTT - H qun tr c s d liu99995/23/2008Tham số (2) Column: tên cột ñược tạo index [ASC | DESC]: tăng dần hoặc giảm dần, mặc nhiên là tăng dần DROP_EXISTING: các clustered hoặc nonclustered index ñã cótrước ñó sẽ bị xoá khi một index mới trùng tênñược tạo ra.Khoa CNTT - H qun tr c s d liu101010105/23/2008Ví dụTạo clustered index trên cột LastName của table EmployeesCREATE CLUSTERED INDEX CL_lastnameON employees(lastname)SET NOCOUNT OFF USE pubs IF EXISTS (SELECT name FROM sysindexes WHERE name = 'au_id_ind') DROP INDEX authors.au_id_indGO USE pubs CREATE INDEX au_id_ind ON authors (au_id) GO
6Khoa CNTT - H qun tr c s d liu111111115/23/2008Ví dụKhoa CNTT - H qun tr c s d liu121212125/23/2008Ví dụ
7Khoa CNTT - H qun tr c s d liu131313135/23/2008Lưu ý (1)Microsoft® SQL Server™ 2000 tự ñộng tạo unique indexes ñể thực hiện PRIMARY KEY và UNIQUE constraints. Trừ khi clustered index ñã có trên table hoặcnonclustered index ñược chỉ ñịnh rõ ràng, một unique, clustered index ñược tạo ñể thực hiện PRIMARY KEY constraint. Trừ khi một clustered index ñược chỉ ñịnh rõ ràng, mộtunique, nonclustered index ñược tạo ra mặc ñịnh ñểthực hiện UNIQUE constraint.Khoa CNTT - H qun tr c s d liu141414145/23/2008Lưu ý (2) Chỉ có owner của table mới có thể tạoindexes trên table ñó. Chỉ có một clustered index trên mỗi table. Có tối ña 249 nonclustered indexes trên mỗitable (kể cả indexes ñược tạo bởi PRIMARY KEY hoặc UNIQUE constraints).
8Khoa CNTT - H qun tr c s d liu151515155/23/2008Lưu ý (3) Kích thước tối ña của các cột nonvariable-length của index là 900 bytes. Ví dụ, mộtindex không thể ñược tạo trên 3 columns màcác có kiểu char(300), char(300), và char (301). Số lượng tối ña của các cột trên một index là16. Khoa CNTT - H qun tr c s d liu161616165/23/2008Bài tập áp dụng Trong database QLVT, tạo index với tênIDX1 cho table vattu trên 2 field: GIABAN giam dan và tên vật tư tăng dần.
. liu1111BÀI 10. INDEXKhoa CNTT - H qun tr c s d liu22225/23/2008Nội dung bài học Giới thiệu Index Cluster Index và NonCluster Index Quản lý Index và. cótrước ñó sẽ bị xoá khi một index mới trùng tênñược tạo ra.Khoa CNTT - H qun tr c s d liu1 0101 0105 /23/2008Ví dụTạo clustered index trên cột LastName