0
0
Lập trình
Admin Team
Admin Teamtechmely

So sánh Chỉ mục Cụm và Không Cụm trong SQL

Đăng vào 1 tháng trước

• 5 phút đọc

Giới thiệu

Khi một bảng được tạo ra và các hàng được chèn vào, SQL sẽ lưu trữ dữ liệu liên quan đến bảng đó trong các trang dữ liệu. Điều này được gọi là nội bộ của SQL. Cách thức lưu trữ dữ liệu có thể là "chỉ mục cụm" hoặc "không cụm", hoặc "heap" (nếu không chỉ định gì).

Heap giống như việc vứt dữ liệu một cách ngẫu nhiên ở bất kỳ đâu có không gian, giống như một cuốn danh bạ không được sắp xếp. Trong SQL Server, nếu không có chỉ mục nào được định nghĩa, heap sẽ là cách tiếp cận mặc định.

Chỉ mục cụm là khi bạn tổ chức danh bạ đó theo một tham số nào đó (như tên, v.v.). Điều này có nghĩa là, khi chỉ mục cụm được định nghĩa, heap sẽ được tổ chức theo tham số đã định nghĩa trong chỉ mục cụm (và do đó không còn là heap, nó sẽ được loại bỏ).

Heap và chỉ mục cụm do đó là các khái niệm đối lập với nhau.

Chỉ mục không cụm giống như một cuốn danh bạ vàng tham chiếu đến cuốn danh bạ (được tổ chức hoặc không được tổ chức).

1️⃣ Heap (không có chỉ mục cụm)

Các hàng chỉ được đặt ở bất kỳ đâu có không gian. Không có thứ tự cụ thể:

Copy
Trang Dữ liệu
+-------------------+   +-------------------+
| StudentID=3,Ravi  |   | StudentID=2,Meera |
| StudentID=1,Anil  |   |                   |
+-------------------+   +-------------------+

👉 Để tìm Name='Meera', SQL phải quét toàn bộ.

2️⃣ Chỉ mục Cụm trên StudentID

Các hàng được sắp xếp vật lý theo StudentID trên các trang dữ liệu:

Copy
Trang Dữ liệu (cụm theo StudentID)
+-------------------+   +-------------------+
| StudentID=1,Anil  |   | StudentID=3,Ravi  |
| StudentID=2,Meera |   |                   |
+-------------------+   +-------------------+

👉 Để tìm StudentID=2, SQL có thể truy cập trực tiếp (nhanh).

3️⃣ Chỉ mục Không Cụm trên Name (bảng có chỉ mục cụm trên StudentID)

Cấu trúc riêng biệt, được sắp xếp theo Name, chỉ vào các hàng:

Copy
Chỉ mục Không Cụm (sắp xếp theo Name)
+--------------------+
| Anil   → StudentID=1
| Meera  → StudentID=2
| Ravi   → StudentID=3
+--------------------+

Trang Dữ liệu Cụm (sắp xếp theo StudentID)
+-------------------+   +-------------------+
| 1,Anil,22         |   | 3,Ravi,20         |
| 2,Meera,21        |   |                   |
+-------------------+   +-------------------+

👉 Các bước khi bạn truy vấn WHERE Name='Meera':

  1. SQL tìm trong chỉ mục không cụm → tìm thấy Meera → StudentID=2.
  2. Sử dụng chỉ mục cụm trên StudentID → lấy hàng 2,Meera,21.

4️⃣ Chỉ mục Không Cụm trên Name (bảng là heap)

Nếu không có chỉ mục cụm, chỉ mục không cụm sẽ chỉ vào địa chỉ vật lý (RID):

Copy
Chỉ mục Không Cụm (sắp xếp theo Name)
+--------------------+
| Anil   → Page1,Slot2
| Meera  → Page2,Slot1
| Ravi   → Page1,Slot1
+--------------------+

Trang Dữ liệu Heap (không có thứ tự)
+-------------------+   +-------------------+
| Page1: Ravi(3)    |   | Page2: Meera(2)   |
| Page1: Anil(1)    |   |                   |
+-------------------+   +-------------------+

👉 Ở đây, SQL nhảy trực tiếp đến vị trí vật lý.

Tóm tắt

  • Heap = không có thứ tự, chỉ mục không cụm chỉ vào vị trí hàng vật lý.
  • Cụm = được sắp xếp theo khóa cụm, chỉ mục không cụm chỉ vào khóa cụm.

Thực hành tốt nhất

  1. Định nghĩa chỉ mục cho các cột thường xuyên truy vấn: Giúp tăng tốc độ truy vấn.
  2. Theo dõi hiệu suất của chỉ mục: Sử dụng các công cụ giám sát của SQL Server để theo dõi và tối ưu hóa.
  3. Tránh sử dụng quá nhiều chỉ mục: Điều này có thể làm chậm việc ghi vào bảng.

Những cạm bẫy thường gặp

  • Xây dựng chỉ mục không cần thiết: Chỉ mục không cần thiết có thể làm giảm hiệu suất.
  • Không thường xuyên bảo trì chỉ mục: Chỉ mục cần được tái tạo thường xuyên để duy trì hiệu suất.

Mẹo hiệu suất

  • Sử dụng chỉ mục cột đơn cho truy vấn đơn giản và chỉ mục nhiều cột cho các truy vấn phức tạp.
  • Thực hiện các truy vấn tìm kiếm thường xuyên trên các chỉ mục cụm để tiết kiệm thời gian.

Khắc phục sự cố

  • Nếu truy vấn chậm, hãy kiểm tra xem có chỉ mục phù hợp hay không.
  • Sử dụng EXPLAIN để phân tích cách SQL xử lý truy vấn của bạn.

Câu hỏi thường gặp

1. Chỉ mục cụm và không cụm khác nhau như thế nào?

Chỉ mục cụm sắp xếp dữ liệu vật lý trong bảng, trong khi chỉ mục không cụm tạo ra một cấu trúc riêng biệt tham chiếu đến các hàng.

2. Khi nào nên sử dụng chỉ mục không cụm?

Sử dụng chỉ mục không cụm khi bạn cần truy vấn dữ liệu dựa trên các cột không phải là khóa chính.

3. Có bao nhiêu chỉ mục có thể được tạo trên một bảng?

Bạn có thể tạo tối đa 999 chỉ mục không cụm trên một bảng trong SQL Server.

Kết luận

Việc hiểu rõ sự khác biệt giữa chỉ mục cụm và không cụm trong SQL là rất quan trọng để tối ưu hóa hiệu suất truy vấn. Hãy cân nhắc cách tổ chức dữ liệu của bạn để đạt được hiệu suất tốt nhất trong các ứng dụng của bạn. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại ý kiến của bạn bên dưới!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào