Khi bạn thực hiện chèn cập nhật và xóa, các chỉ mục của bạn sẽ bị phân mảnh cả bên trong và bên ngoài.
Phân mảnh nội bộ là bạn có tỷ lệ không gian trống cao trên các trang chỉ mục của mình, nghĩa là SQL Server cần đọc nhiều trang hơn khi quét chỉ mục.
Phân mảnh bên ngoài là khi các trang của chỉ mục không còn theo thứ tự nữa, vì vậy SQL Server phải thực hiện nhiều công việc hơn, đặc biệt là trong các thuật ngữ IO để đọc chỉ mục.
Nếu các chỉ mục của bạn trở nên quá phân mảnh, tốt nhất, các truy vấn của bạn sẽ kém hiệu quả hơn nhưng tệ nhất, SQL Server sẽ ngừng sử dụng tất cả các chỉ mục cùng nhau, nghĩa là hầu như tất cả các truy vấn sẽ phải thực hiện quét bảng hoặc quét chỉ mục theo cụm. Điều này sẽ làm tổn thương hiệu suất của bạn rất nhiều!
Khi bạn sắp xếp lại một chỉ mục, thì SQL Server sẽ sử dụng các trang chỉ mục hiện có và chỉ xáo trộn dữ liệu xung quanh các độ tuổi đó. Điều này sẽ làm giảm bớt sự phân mảnh bên trong và cũng có thể loại bỏ một lượng nhỏ phân mảnh bên ngoài. Đây là một hoạt động trọng lượng nhẹ hơn so với xây dựng lại và luôn luôn trực tuyến.
Khi bạn xây dựng lại một chỉ mục, SQL Server thực sự sử dụng dữ liệu của chỉ mục và sử dụng một bộ trang chỉ mục mới. Điều này rõ ràng sẽ làm giảm bớt sự phân mảnh bên trong và bên ngoài nhưng là một hoạt động có trọng lượng nặng hơn và theo mặc định làm cho chỉ mục ngoại tuyến, mặc dù nó có thể được thực hiện như một hoạt động trực tuyến, tùy thuộc vào phiên bản và cài đặt SQL Server của bạn.
Tuy nhiên, đừng mong đợi có 0 phân mảnh sau khi xây dựng lại. Trừ khi bạn sử dụng gợi ý truy vấn MAXDOP, SQL Server sẽ song song hóa hoạt động xây dựng lại và càng có nhiều bộ xử lý, thì càng có nhiều phân mảnh, bởi vì mỗi bộ xử lý hoặc lõi, sẽ xây dựng lại phần hoặc phân đoạn của riêng chúng, mà không quan tâm đến lẫn nhau. Đây là một sự đánh đổi giữa các mức phân mảnh tốt nhất và thời gian để xây dựng lại chỉ số. Để phân mảnh gần 0, sử dụng MAXDOP 1 và sắp xếp kết quả trong TempDB.