Tôi sử dụng tập lệnh Ola Hallengren để bảo trì Chỉ mục. Trước khi tôi làm điều đó, tôi đã sử dụng truy vấn sau để xem chỉ mục nào bị phân mảnh nhiều nhất:
SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
ORDER BY indexstats.avg_fragmentation_in_percent desc
Trong trường hợp của tôi, avg_frag sắc tố là hơn 70% cho 15 chỉ mục và hơn 30% cho 28 chỉ mục.
Vì vậy, tôi xây dựng lại mọi chỉ mục bằng giải pháp của Ola Hallengren. Khi tôi chạy lại truy vấn, đây là kết quả:
Phân mảnh trên 70% cho 12 chỉ số, trên 30% cho 15 chỉ mục.
Tôi đoán, lý do là vì page_count
, thấp hơn 1000 cho mỗi chỉ số vẫn còn rất phân mảnh. Ví dụ: một trong những chỉ số có
page_count
967 có tỷ lệ phân mảnh là 98,98% ! Đối với tôi, nó có vẻ đáng để xây dựng lại chỉ số đó! Tôi đã làm, và sau đó, sự phân mảnh là 0% . Ngoài ra, một chỉ số với page_count
132 là từ 95% đến 0%
Vì vậy, câu hỏi của tôi là, lý do nào để KHÔNG xây dựng lại các chỉ mục đó? Một lý do có thể là việc xây dựng lại tốn chi phí thời gian và tài nguyên, nhưng vì các chỉ mục nhỏ, điều này không có nghĩa là nó tốn tương đối ít tài nguyên và dù sao nó vẫn sẽ là tốt để xây dựng lại nó?
Có nhiều câu hỏi liên quan trên trang web này, nhưng tất cả chúng đều trả lời câu hỏi tại sao một chỉ mục sẽ không phân mảnh hoặc nếu các chỉ mục vẫn hữu ích nếu chúng nhỏ và bạn không phân mảnh chúng, trong khi ở đây, câu lệnh KHÔNG làm giảm sự phân mảnh, với Câu hỏi được đặt ra, tại sao không làm điều đó?