Sự khác biệt giữa a clustered
và a là non-clustered index
gì?
Sự khác biệt giữa a clustered
và a là non-clustered index
gì?
Câu trả lời:
Chỉ số cụm
Chỉ số không cụm
Cả hai loại chỉ mục sẽ cải thiện hiệu suất khi chọn dữ liệu với các trường sử dụng chỉ mục nhưng sẽ làm chậm hoạt động cập nhật và chèn.
Do các chỉ mục phân cụm và cập nhật chậm hơn nên được đặt trên một trường thường tăng dần, tức là Id hoặc Dấu thời gian.
SQL Server thường sẽ chỉ sử dụng một chỉ mục nếu độ chọn lọc của nó trên 95%.
Các chỉ mục được nhóm lại theo thứ tự vật lý dữ liệu trên đĩa. Điều này có nghĩa là không cần thêm dữ liệu cho chỉ mục, nhưng chỉ có thể có một chỉ mục được nhóm (rõ ràng). Truy cập dữ liệu bằng cách sử dụng một chỉ mục cụm là nhanh nhất.
Tất cả các chỉ mục khác phải không được nhóm. Một chỉ mục không được phân cụm có một bản sao dữ liệu từ các cột được lập chỉ mục được sắp xếp theo thứ tự cùng với các con trỏ tới các hàng dữ liệu thực tế (các con trỏ tới chỉ mục được phân cụm nếu có một). Điều này có nghĩa là việc truy cập dữ liệu thông qua một chỉ mục không được nhóm phải trải qua một lớp bổ sung. Tuy nhiên, nếu bạn chỉ chọn dữ liệu có sẵn trong các cột được lập chỉ mục, bạn có thể lấy lại dữ liệu trực tiếp từ dữ liệu chỉ mục trùng lặp (đó là lý do tại sao chỉ nên CHỌN các cột mà bạn cần và không sử dụng *)
Các chỉ mục cụm được lưu trữ vật lý trên bảng. Điều này có nghĩa là chúng nhanh nhất và bạn chỉ có thể có một chỉ mục được nhóm trên mỗi bảng.
Các chỉ mục không được phân cụm được lưu trữ riêng biệt và bạn có thể có bao nhiêu tùy ý.
Tùy chọn tốt nhất là đặt chỉ mục được nhóm của bạn trên cột duy nhất được sử dụng nhiều nhất, thường là PK. Bạn phải luôn luôn có một chỉ mục cụm được chọn tốt trong các bảng của mình, trừ khi một lý do rất hấp dẫn - không thể nghĩ ra một chỉ số duy nhất, nhưng này, nó có thể ở ngoài đó - vì không làm như vậy xuất hiện.
Ngoài những khác biệt này, bạn phải biết rằng khi bảng không được phân cụm (khi bảng không có chỉ mục được phân cụm), các tệp dữ liệu không được sắp xếp và nó sử dụng cấu trúc dữ liệu Heap làm cấu trúc dữ liệu.
Ưu điểm:
Các chỉ mục được nhóm hoạt động tốt cho các phạm vi (ví dụ: chọn * từ my_table trong đó my_key nằm giữa @min và @max)
Trong một số điều kiện, DBMS sẽ không phải thực hiện công việc để sắp xếp nếu bạn sử dụng câu lệnh orderby.
Nhược điểm:
Các chỉ mục được nhóm có thể làm chậm các phần chèn vì bố trí vật lý của các bản ghi phải được sửa đổi khi các bản ghi được đưa vào nếu các khóa mới không theo thứ tự tuần tự.
Một chỉ mục được nhóm về cơ bản là một bản sao được sắp xếp của dữ liệu trong các cột được lập chỉ mục.
Ưu điểm chính của một chỉ mục được nhóm là khi truy vấn (tìm kiếm) của bạn định vị dữ liệu trong chỉ mục thì không cần thêm IO để truy xuất dữ liệu đó.
Chi phí hoạt động của việc duy trì một chỉ mục được nhóm, đặc biệt là trong một bảng được cập nhật thường xuyên, có thể dẫn đến hiệu suất kém và vì lý do đó, có thể nên tạo một chỉ mục không được phân cụm.
Một cơ sở dữ liệu được lập chỉ mục có hai phần: một tập hợp các bản ghi vật lý, được sắp xếp theo thứ tự tùy ý và một bộ chỉ mục xác định trình tự trong đó các bản ghi sẽ được đọc để mang lại kết quả được sắp xếp theo một tiêu chí nào đó. Nếu không có mối tương quan giữa sự sắp xếp vật lý và chỉ mục, thì việc đọc tất cả các bản ghi theo thứ tự có thể yêu cầu thực hiện nhiều thao tác đọc bản ghi đơn độc lập. Vì cơ sở dữ liệu có thể đọc hàng chục bản ghi liên tiếp trong thời gian ngắn hơn để đọc hai bản ghi không liên tiếp, hiệu suất có thể được cải thiện nếu các bản ghi liên tiếp trong chỉ mục cũng được lưu liên tiếp trên đĩa.
Ví dụ: nếu bắt đầu với một cơ sở dữ liệu không phân cụm trống và thêm 10.000 bản ghi theo thứ tự ngẫu nhiên, các bản ghi có thể sẽ được thêm vào cuối theo thứ tự chúng được thêm vào. Đọc cơ sở dữ liệu theo thứ tự theo chỉ mục sẽ yêu cầu 10.000 lần đọc một bản ghi. Tuy nhiên, nếu người ta sử dụng một cơ sở dữ liệu phân cụm, hệ thống có thể kiểm tra khi thêm từng bản ghi xem bản ghi trước đó có được lưu trữ không; nếu thấy rằng đó là trường hợp, nó có thể ghi bản ghi đó với bản mới ở cuối cơ sở dữ liệu. Sau đó, nó có thể xem bản ghi vật lý trước các vị trí nơi các bản ghi di chuyển được sử dụng để cư trú và xem bản ghi tiếp theo có được lưu trữ không. Nếu nó là trường hợp đó, nó có thể di chuyển bản ghi đó đến vị trí đó. Sử dụng cách tiếp cận này sẽ khiến nhiều bản ghi được nhóm lại thành từng cặp,
Trong thực tế, cơ sở dữ liệu cụm sử dụng các thuật toán phức tạp hơn so với điều này. Tuy nhiên, một điều quan trọng cần lưu ý là có sự đánh đổi giữa thời gian cần thiết để cập nhật cơ sở dữ liệu và thời gian cần thiết để đọc nó một cách tuần tự. Việc duy trì cơ sở dữ liệu phân cụm sẽ tăng đáng kể số lượng công việc cần thiết để thêm, xóa hoặc cập nhật hồ sơ theo bất kỳ cách nào có thể ảnh hưởng đến trình tự sắp xếp. Nếu cơ sở dữ liệu sẽ được đọc tuần tự thường xuyên hơn nhiều so với cơ sở dữ liệu sẽ được cập nhật, phân cụm có thể là một chiến thắng lớn. Nếu nó sẽ được cập nhật thường xuyên nhưng hiếm khi đọc theo trình tự, việc phân cụm có thể là một sự tiêu tốn hiệu năng lớn, đặc biệt là nếu chuỗi trong đó các mục được thêm vào cơ sở dữ liệu độc lập với thứ tự sắp xếp của chúng đối với chỉ mục được phân cụm.
Bạn có thể đã trải qua phần lý thuyết từ các bài viết trên:
-Chỉ số được nhóm lại như chúng ta có thể thấy các điểm trực tiếp để ghi, tức là trực tiếp của nó để mất ít thời gian hơn cho tìm kiếm. Ngoài ra, nó sẽ không mất thêm bộ nhớ / dung lượng để lưu chỉ mục
-Trong khi, trong Chỉ mục không được phân cụm, nó gián tiếp trỏ đến Chỉ mục được phân cụm thì nó sẽ truy cập vào bản ghi thực, do tính chất gián tiếp của nó, sẽ mất thêm thời gian để truy cập. Ngoài ra, nó cần bộ nhớ / không gian riêng để lưu trữ mục lục
// Sao chép từ MSDN, điểm thứ hai của chỉ mục không phân cụm không được đề cập rõ ràng trong các câu trả lời khác.
Phân cụm
Không bao gồm