Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Bao lâu thì các chỉ mục nên được xây dựng lại trong cơ sở dữ liệu SQL Server của chúng tôi?

Có một sự đồng thuận chung rằng bạn nên tổ chức lại ("chống phân mảnh") các chỉ số của mình ngay khi phân mảnh chỉ mục đạt hơn 5 (đôi khi 10%) và bạn nên xây dựng lại chúng hoàn toàn khi nó vượt quá 30% (ít nhất đó là con số tôi ' đã được nghe ủng hộ ở rất nhiều nơi).

Michelle Ufford (còn gọi là "SQL Fool") có tập lệnh chống phân mảnh chỉ mục tự động , sử dụng các giới hạn chính xác đó để quyết định thời điểm tổ chức lại hoặc xây dựng lại một chỉ mục.

Ngoài ra, hãy xem mẹo của Brad McGehee về xây dựng lại chỉ mục với một số suy nghĩ và mẹo hay về cách đối phó với việc xây dựng lại chỉ mục.

Tôi sử dụng tập lệnh này ở đây (không thể nhớ tôi lấy nó từ khi nào - dù là ai:cảm ơn rất nhiều! Công cụ thực sự hữu ích) để hiển thị phân mảnh chỉ mục trên tất cả các chỉ số của bạn trong một cơ sở dữ liệu nhất định:

SELECT 
    t.NAME 'Table name',
    i.NAME 'Index name',
    ips.index_type_desc,
    ips.alloc_unit_type_desc,
    ips.index_depth,
    ips.index_level,
    ips.avg_fragmentation_in_percent,
    ips.fragment_count,
    ips.avg_fragment_size_in_pages,
    ips.page_count,
    ips.avg_page_space_used_in_percent,
    ips.record_count,
    ips.ghost_record_count,
    ips.Version_ghost_record_count,
    ips.min_record_size_in_bytes,
    ips.max_record_size_in_bytes,
    ips.avg_record_size_in_bytes,
    ips.forwarded_record_count
FROM 
    sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') ips
INNER JOIN  
    sys.tables t ON ips.OBJECT_ID = t.Object_ID
INNER JOIN  
    sys.indexes i ON ips.index_id = i.index_id AND ips.OBJECT_ID = i.object_id
WHERE
    AVG_FRAGMENTATION_IN_PERCENT > 0.0
ORDER BY
    AVG_FRAGMENTATION_IN_PERCENT, fragment_count
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lỗi chuyển đổi varchar thành float

  2. Lý do sử dụng @@ Identity thay vì scope_identity

  3. Tìm một giá trị ở bất kỳ đâu trong cơ sở dữ liệu

  4. Tìm hiểu khối lượng công việc máy chủ SQL của bạn

  5. SQL Server - sau khi chèn trình kích hoạt - cập nhật một cột khác trong cùng một bảng