TUYỂN DỤNG

[Database][MS-SQL] Clustered Index là gì?

Bài viết hôm nay Sơn sẽ trình bày một số khái miện về Clusterned Index và cách sử dụng loại Index này.

Tổng hợp mô tả từ MSDN của Microsoft.

Clustered Index là một dạng cấu trúc dùng để lưu trữ và sắp xếp dữ liệu vật lý trong table hoặc view dựa trên các giá trị khóa của chúng.

Các cột khóa này được chỉ định trong định nghĩa index. Mỗi table hoặc view chỉ có duy nhất một Clusterd Index vì bản thân các dòng dữ liệu được lưu trữ và sắp xếp theo thứ tự vật lý dựa trên các cột trong loại Index này.

Khi dữ liệu trong table hoặc view cần được lưu trữ và sắp xếp theo một thứ tự nhất định chính là lúc cần dùng đến Clustered Index.

Khi một table có một Clusted Index thì khi đó table được gọi là Clustered Table. Nếu không, các dòng dữ liệu của table được lưu trong một cấu trúc không được sắp xếp Index gọi là HEAP.

Tổng hợp mô tả từ một số diễn đàn trên mạng.

Clustered Index thường được tạo khi bạn tạo một khóa chính cho bảng(primary key).

Clustered index không đòi hỏi phải có tính duy nhất (unique) trong dữ liệu. Nhưng khi nó không duy nhất thì khóa index được gắn thêm một giá trị 4-byte ngẫu nhiên để đảm bảo các node index vẫn là duy nhất. Mục đích của việc này là để cho con trỏ trong các index khác luôn trỏ đến đến duy nhất một bản ghi, khi đó con trỏ sẽ bao gồm khóa index + chuỗi 4 byte được gắn thêm.

Việc gắn thêm như vậy làm tăng kích thước của clustered index cũng như các index khác, nên trong đa số tình huống thực tiễn bạn nên tạo clustered index là duy nhất. Thực tế, theo mặc định một clustered index duy nhất sẽ được tạo khi khai báo khóa chính.

Phân tích qua thực tế.

Lý thuyết đọc nghe khó hiểu quá các bạn nhỉ, thôi giờ qua luôn một số ví dụ thực thế cho dễ hiểu. Đầu tiên ta cần tạo một 2 bảng để thực hiện ví dụ. Bạn hãy tạo 2 bảng như bên dưới.
CREATE TABLE data
(
P_Id int IDENTITY,
Value varchar(255) NOT NULL,
)

CREATE TABLE data_index
(
P_Id int IDENTITY,
Value varchar(255) NOT NULL,
)

Tiếp theo ta sẽ tạo dữ liệu cho 2 bảng. (Câu lệnh này sẽ chạy hơi lâu ^^!.)
DECLARE @intFlag INT
set @intFlag = 1
WHILE (@intFlag < 20000)
BEGIN
    INSERT INTO data (Value) VALUES('DEMO')
    INSERT INTO data_index(Value) VALUES('DEMO')
    PRINT @intFlag
    SET @intFlag = @intFlag + 1
END

Tiếp theo ta sẽ tạo Clustered Index cho cột P_Id của bảng data_index.

CREATE CLUSTERED INDEX Index_DataIndex ON dbo.data_index(P_Id)

Bây giờ ta sẽ kiểm tra hiệu suất giữa bảng có Clustered Index(data_index) và bảng không có Clustered Index(data) bằng 2 câu trúc bên dưới.

SELECT * FROM data WHERE P_Id = 100
SELECT * FROM data_index WHERE P_Id = 100

Ta sẽ thấy dược kết quả như hình bên dưới.


Như trong hình trên ta thấy bảng data không sử dụng dụng Clustered Index thì chi phí query chiếm tới 98%, trong khi bảng data_index có sử dụng Clustered Index chi phí để thực thi câu truy vấn chỉ mất 2%.

COMMENTS

Name

Anime,1,Application,6,Articles,6,Audio,2,Database,4,ElasticSearch,1,FFmpeg,1,Java,6,JavaScript,1,Links,2,Model,3,MS-SQL,3,Notepad++,1,Pictures,4,Programming,7,Projects,3,SPS,3,SQL,4,System,1,Truyện,2,Windows 10,1,YouTube,1,
ltr
item
Bùi Ngọc Sơn: [Database][MS-SQL] Clustered Index là gì?
[Database][MS-SQL] Clustered Index là gì?
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP442ULbE1ZCXQtbqEjxVvF5fmPzvGLvEFEgYrGnaxCu32op5xj3Ybj426i3PgB46AfxFIdu2V3fYRrVk-3CJm7gie6BZToAMN_h9B2xnWJiS3RXqIvK-U1lbBWKXRaT677IpQWOzdbBs/s1600/SQL_INDEX.png
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP442ULbE1ZCXQtbqEjxVvF5fmPzvGLvEFEgYrGnaxCu32op5xj3Ybj426i3PgB46AfxFIdu2V3fYRrVk-3CJm7gie6BZToAMN_h9B2xnWJiS3RXqIvK-U1lbBWKXRaT677IpQWOzdbBs/s72-c/SQL_INDEX.png
Bùi Ngọc Sơn
https://bnson1986.blogspot.com/2020/01/clustered-index-la-gi.html
https://bnson1986.blogspot.com/
http://bnson1986.blogspot.com/
http://bnson1986.blogspot.com/2020/01/clustered-index-la-gi.html
true
7468510552861380973
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content