Bài viết hướng dẫn cách tạo, đổi tên và xóa 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 ]
[ FILESTR
EAM_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 (h
o);
Ở 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 da
nhba (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, te
n 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 danh
ba (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.
Bài trước: Ràng buộc kiểm tra trong SQL Server
Bài sau: Cấp / Thu hồi quyền trong SQL Server