Avatar
0
Nguyen Nam Teacher
Nguyen Nam Teacher
So sánh clustered index và non-clustered index trong SQL Server
Như tiêu đề câu hỏi ạ.

Mọi người cho em hỏi sự khác nhau giữa 2 loại index trên là gì ạ?

Khi nào thì nên dùng loại nào ạ?

Em cảm ơn.

  • Answer
sql server indexing
Remain: 5
2 Answers
Avatar
tvd12 Teacher
tvd12 Teacher
Câu này muốn trả lời thì bạn phải đi từ vấn đề "How the data is stored?" trong SQL Server. Bạn sẽ tìm hiểu được cái khái niệm Page, Leaf Page, Leaf node, B-Tree. Từ đó bạn sẽ hiểu được bản chất của Clustered index là một physical index được store ở Page Header (Metadata) và dùng để sorted các physical row của table trong B-tree. Ngược lại non-clustered index lại ko thuộc physical data của table mà được lưu trữ ở 1 vùng khác, đóng vai trò như pointer đến vùng row data. Từ 2 vấn đề lưu trữ index bạn sẽ rõ dc vì sao clustered chỉ duy nhất 1 trong table trong khi có nhiều non clustered index

Đây là hình 1 data của table được lưu trữ dạng vật lý trên disk nè. Nhìn vô đây sẽ hiểu được cách các row của 1 table nó lưu trữ thế nào, làm sao sql server có thể tìm nhanh dc dữ liệu:

Cái clustered index thực chất là để map giữa RowNo và sort các row đó như thế nào trong B-Tree

Còn cái non clustered thực chất là nằm ngoài bảng này, nó sẽ là pointer đến clustered index thôi

Nguồn Johnathan Le

  • 1
  • Reply
Avatar
monkey Teacher
monkey Teacher
Mình không biết dùng từ "so sánh" có đúng không, cá nhân mình nghĩ rằng 2 cái này sinh ra là để phục vụ cho 1 mục tiêu chung là truy vấn nhanh hơn.

1. clustered index

Có thể hiểu đơn giản là 1 B-Tree (cây) và key là trường id của table và value là toàn bộ thông tin của bản ghi tương ứng với id đó. Cái này mặc định phải có và thường là duy nhất trong 1 bảng.

2. non-clustered index

Có thể hiểu đơn giản là 1 B-Tree (cây) với key là trường bạn muốn đánh index và value là id. Như vậy thì 1 bảng sẽ có thể đánh index thoải mái và không bị giới hạn. Tuy nhiên tìm kiếm sẽ phải trải qua 2 bước:

  • Bước 1: tìm ra id của bản ghi theo giá trị trường bạn truyền vào
  • Bước 2: tìm ra bản ghi theo id vừa tìm được
  • 0
  • Reply