Chỉ mục trong SQL Server

Chỉ mục – Index trong SQL Server là gì?

Chỉ mục là phương pháp được dùng để lấy bản ghi nhanh hơn. Chỉ mục trỏ tới từng giá trị xuất hiện trong cột được đánh chỉ mục.

Tạo chỉ mục

Cú pháp

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX ten_chimuc   ON ten_bang ( cot1 [ASC | DESC ], ... cot_n [ ASC | DESC ] )   [ INCLUDE ( cot1, ... cot_n ) ]   [ WHERE dieu_kien ]   [ WITH ( PAD_INDEX = { ON | OFF }    | FILLFACTOR = fillfactor    | SORT_IN_TEMPDB = { ON | OFF }    | IGNORE_DUP_KEY = { ON | OFF }    | STATISTICS_NORECOMPUTE = { ON | OFF }    | STATISTICS_INCREMENTAL = { ON | OFF }    | DROP_EXISTING = { ON | OFF }    | ONLINE = { ON | OFF }    | ALLOW_ROW_LOCKS = { ON | OFF }    | ALLOW_PAGE_LOCKS = { ON | OFF }    | MAXDOP = so_toida    | DATA_COMPRESSION = { NONE | PAGE | ROW }     [ ON PARTITIONS ( { so | khoang } ]   [ ON scheme_phandoan ( cot )   | ON fnhomtaptin | ON nhomtaptin_macdinh ]   [ FILESTREAM_ON { nhomtaptin | scheme_phandoan };

UNIQUE

Tùy chọn, cho biết việc kết hợp các giá trị trong cột chỉ mục phải là duy nhất.

CLUSTERED

Tùy chọn, cho biết thứ tự logic quyết định việc sắp xếp vật lý các hàng trong bảng (tức là thứ tự bản ghi trong bảng sắp xếp theo trường trong chỉ mục).

NONCLUSTERED

Tùy chọn, cho biết thứ tự logic không quyết định việc sắp xếp vật lý các hàng trong bảng.

ten_chimuc

Tên của chỉ mục muốn tạo

ten_bang

Tên của bảng hoặc View mà chỉ mục được tạo trên đó.

cot1, … cot_n

Cột từ đó tạo chỉ mục.

ASC | DESC

Thứ tự sắp xếp cho các giá trị trong cột.

INCLUDE (cot1, … cot_n)

Tùy chọn, cột không phải là cột chính để thêm vào trang nhớ (leaf-level) của chỉ mục Nonclustered.

WHERE dieu_kien

Tùy chọn, là điều kiện xác định hàng nào sẽ đưa vào chỉ mục.

ON scheme_phanvung (cot)

Tùy chọn, cho biết không gian phân vùng quyết định nhóm tập tin (filegroup) mà ở đó phân vùng được ánh xạ vào.

ON nhomtaptin

Tùy chọn, cho biết chỉ số sẽ tạo trên nhóm tập tin được chỉ định.

ON nhomtaptin_macdinh

Tùy chọn, cho biết nhóm tập tin mặc định.

FILESTREAM_ON { nhomtaptin | khongigna_phanvung }

Tùy chọn, cho biết vị trí đặt dữ liệu FILESTREAM cho chỉ số Clustered.

Ví dụ về chỉ mục trong SQL Server

CREATE INDEX danhba_chimuc   ON danhba (ho);

Ở ví dụ này, ta tạo chỉ mục có tên danhba_chimuc trên bảng danhba, gồm một trường là ho. Có thể tạo chỉ mục nhiều hơn 1 trường như trong ví dụ dưới đây.

CREATE INDEX danhba_chimuc   ON danhba (ho, ten);

Ví dụ này tạo chỉ mục danhba_chimuc trong bảng danhba, gồm 2 trường là ho và ten. Vì không chỉ định ASC hay DESC cho từng mục nên chỉ số được tạo với mỗi trường theo thứ tự mặc định là tăng dần. Nếu muốn theo thứ tự giảm dần có thể làm như dưới đây.

CREATE INDEX danhba_chimuc  ON danhba (ho DESC, ten DESC);

Lệnh CREATE INDEX trên đây tạo chỉ mục danhba_chimuc với họ và tên sắp xếp theo thứ tự giảm dần.

Ví dụ về chỉ mục duy nhất

CREATE UNIQUE INDEX danhba_chimucduynhat  ON danhba (ho, ten);

Ví dụ này tạo chỉ mục có tên danhba_chimuc trên bảng danhba gồm họ và tên, và đảm bảo rằng sự kết hợp của 2 trường này là duy nhất. Có thể tạo chỉ mục duy nhất Clustered để thứ tự sắp xếp vật lý của hàng trong bảng sẽ do thứ tự logic của chỉ mục quyết định.

CREATE UNIQUE CLUSTERED INDEX danhba_chimucduynhat ON danhba (ho, ten);

Chỉ mục mới tạo trong ví dụ này có tên danhba_chimucduynhat gồm 2 trường họ và tên, và cũng thay đổi thứ tự sắp xếp của các hàng trong bảng theo nó.

Đổi tên chỉ mục trong SQL Server

Cú pháp

sp_rename tenbang.ten_chi_muc_cu’, ten_chimuc_moi’, INDEX’;

ten_bang

Tên của bảng mà chỉ mục được tạo ở đó.

ten_chimuc_cu

Tên của chỉ mục muốn đổi tên.

ten_chimuc_moi

Tên mới cho chỉ mục.

Ví dụ

sp_rename danhba.danhba_chimuc’, danhba_chimuc_ten’, INDEX’;

Ví dụ này đổi tên chỉ mục trong bảng danhba từ danhba_chimuc thành danhba_chimuc_ten.

Xóa chỉ mục trong SQL Server

Cú pháp

DROP INDEX tenbang.ten_chimuc;

ten_bang

Tên của bảng mà chỉ mục được tạo ở đó.

ten_chimuc_cu

Tên của chỉ mục muốn xóa.

Ví dụ

DROP INDEX danhba.danhba_chimuc;

Ví dụ này xóa chỉ mục có tên danhba_chimuc.