ĐĂNG KÝ ĐỂ NHẬN THÔNG TIN MỚI NHẤT

Clustered Index trong tối ưu SQL Server

Khi sử dụng kỹ thuật tối ưu Index, bạn sẽ gặp khái niệm Clustered Index và Non-clustered Index. Bài viết này giúp bạn hiểu về khái niệm Clustered Index và cách sử dụng trong cơ sở dữ liệu SQL Server

 

1. Index là gì?

Index là một kỹ thuật giúp bạn tìm kiếm dữ liệu trong Table nhanh hơn.

Khi nói về Index bạn có thể hình dung ra một số hình ảnh sau:

  • Hình ảnh về MỤC LỤC của một quyển sách
  • Hình ảnh về DANH BẠ ĐIỆN THOẠI

Index có 2 loại, tương ứng với 2 hình ảnh trên:

  • Ví dụ về MỤC LỤC một quyển sách chính là đại diện cho NON-CLUSTERED INDEX
  • Ví dụ về DANH BẠ ĐIỆN THOẠI chính là đại diện cho CLUSTERED INDEX

 

2. Clustered Index là gì?

Hãy hình dung về hình ảnh thiết kế danh bạ điện thoại:

  • Các thông tin trong danh bạ được sắp xếp theo bảng chữ cái của phần Tên
  • Khi chúng ta tra cứu theo tên, cùng dòng đó ta cũng có thể biết được Số điện thoại là bao nhiêu 

Vi du clustered index

 

Các bạn hãy tìm hiểu đặc điểm của loại Index này thông qua các Demo sau nhé

3. Demo kiểm chứng việc tạo Clustered Index sẽ khiến bảng chứa dữ liệu theo thứ tự được sắp xếp.

3.1. Bước 1: Kiểm tra cách thức chứa dữ liệu của bảng không có Clustered Index

Thực hiện tạo bảng wecommit_test_index chưa có Clustered Index 

create table wecommit_test_index (id int, name varchar(20), salary int);

Commands completed successfully.


## Thêm dữ liệu vào bảng, các dữ liệu này có giá trị ID không theo một thứ tự nào cả

insert into wecommit_test_index values(3, 'Tran Quoc Huy', 5000);

insert into wecommit_test_index values(2, 'Wecommit', 200);

insert into wecommit_test_index values(1, 'Tran Dinh Huy', 3000);

insert into wecommit_test_index values(4, 'Tran Duc Tuan', 4000);

(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)

## Kiểm tra dữ liệu trong bảng

select * from wecommit_test_index

 

Dữ liệu của bảng wecommit_test_index lưu theo thứ tự các dữ liệu được Insert vào bảng (Cột ID không được sắp xếp theo chiều tăng dần hoặc giảm dần).

Chiến lược thực thi của câu lệnh lúc này là: Table Scan (quét toàn bộ bảng) để trả ra kết quả mà câu lệnh SQL yêu cầu.

Ghi chú:

 

 

Chi phí (Cost) của câu lệnh với chiến lược Table Scan là: 0.0032864

3.2. Bước 2: Thực hiện tạo Clustered Index trên bảng

Bây giờ ta tiến hành tạo Index trên cột ID

CREATE CLUSTERED INDEX IDX_ID   ON wecommit_test_index(id);   

Commands completed successfully.

Thực hiện kiểm tra lại dữ liệu bảng sau khi đã tạo Index

select * from wecommit_test_index;

Dữ liệu sau khi tạo Clustered Index

Chiến lược thực thi của câu lệnh lúc này không phải quét toàn bộ bảng (TABLE SCAN) nữa, mà chuyển sang quét toàn bộ CLUSTERED INDEX.

clustered index scan

Chi phí ước tính của câu lệnh là: 0.0032864

4. Demo kiểm thử việc tạo nhiều hơn 1 Clustered Index trên bảng

Bây giờ, chúng ta thử tạo thêm 1 INDEX dạng CLUSTERED trên cột SALARY

CREATE CLUSTERED INDEX IDX_SAL   ON wecommit_test_index(salary); 

Hệ thống sẽ báo lỗi như sau:

Cannot create more than one clustered index on table ‘wecommit_test_index’. Drop the existing clustered index ‘IDX_ID’ before creating another.

Hệ thống sẽ không cho phép tạo thêm CLUSTERED INDEX mới, vì dữ liệu chỉ có thể sắp xếp theo 1 tiêu chí. Hiện tại dữ liệu đã sắp xếp theo thứ tự của cột ID, bây giờ chúng ta lại muốn đồng thời sắp xếp tăng dần theo SALARY là điều không thể !

5. Kiểu Index này có thể chứa giá trị NULL không?

Clustered Index hoàn toàn có thể chứa giá trị NULL

Hãy xem Demo sau:

Chúng ta sẽ thực hiện thêm một số bản ghi có cột ID chứa giá trị NULL vào bảng

insert into wecommit_test_index values(NULL, ‘WECOMMIT 2’, 10000);

(1 row affected)

insert into wecommit_test_index values(NULL, ‘WECOMMIT 3’, 9000);

(1 row affected)

 

select * from wecommit_test_index;

Chúng ta thấy dữ liệu NULL được thêm thành công và được sắp xếp đầu tiên trong bảng.

6. Tại đây, có một số câu hỏi mà bạn có thể tìm hiểu sâu hơn

Vậy việc tạo Clustered Index có ảnh hưởng thế nào tới hiệu năng của một bảng?

Trường hợp nào ta nên tạo Clustered Index?

PK thì có liên quan gì đến Clustered Index hay không?

7. Nếu ban muốn biết toàn bộ các kiến thức và kinh nghiệm tối ưu để trở nên khác biệt so với các anh em DEV đồng nghiệp?

Đây là chương trình sẽ giúp bạn hoàn toàn KHÁC BIỆT so với các anh em DEV đồng nghiệp: Click vào chương trình Từ điển tối ưu 100x hiệu năng

8. Tác giả bài viết:

Trần Quốc Huy – Thông tin chi tiết của tôi bạn có thể xem thêm tại đây.

Facebook của tôi: https://www.facebook.com/tran.q.huy.71/

Youtube: Click vào đây

Views: 1828





    Câu hỏi bảo mật

    Trả lời

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    Ask ChatGPT
    Set ChatGPT API key
    Find your Secret API key in your ChatGPT User settings and paste it here to connect ChatGPT with your Tutor LMS website.