2010-09-15 34 views
5

Tôi đang tìm kiếm một truy vấn để tìm các chỉ mục bị thiếu. Tôi đã lấy một truy vấn cơ sở được tạo bởi các Red-Gate folks trong SQL Server DMV Starter Pack eBook của họ và đang sửa đổi nó một chút. Có một vài cột trong số sys.dm_db_missing_index_group_stats mà tôi không biết cách diễn giải. Đó là:Máy chủ SQL DMV - sys.dm_db_missing_index_group_stats - Các cột này có ý nghĩa gì?

avg_total_user_cost 
avg_user_impact 

Theo tài liệu tôi tìm thấy avg_total_user_cost được định nghĩa là Đại diện cho tổng chi phí người dùng trung bình mỗi lần khi truy vấn người dùng được thực hiện. Và, avg_user_impact Biểu thị giá trị dưới dạng phần trăm. Nó cho thấy số lượng cải tiến mà bạn có thể nhận được nếu chỉ mục được tạo ra.

Chỉ mục truy vấn của tôi cho biết sẽ được thêm cho thấy 2,22 chi phí người dùng trung bình và 99,82 tác động của người dùng. Những con số này thực sự có ý nghĩa gì? Điều này có nghĩa là bằng cách thêm chỉ mục, tôi có thể cải thiện tốc độ truy vấn được liên kết thêm 99,82%. Tôi không có đầu mối những gì 2.22 có thể có nghĩa là.

Cảm ơn.

+0

Bạn có một truy vấn tốt để tìm các chỉ mục bị thiếu không? –

+0

có một điều tốt ở đây: http://www.geniiius.com/blog/missing-indexes –

Trả lời

9

giải thích của tôi về những đã được rằng:

  • avg_total_user_cost là trung bình hiện tại của tất cả các truy vấn có thể có khả năng được hưởng lợi từ việc tạo ra của nhóm chỉ số mất tích. "Chi phí" là giá trị đơn vị được tính bởi trình tối ưu hóa . Xem: SQL SERVER – Execution Plan – Estimated I/O Cost – Estimated CPU Cost – No Unit

  • avg_user_impact là một tỷ lệ phần trăm đại diện cho sự sụt giảm trung bình trong chi phí của tất cả các truy vấn nếu nhóm chỉ số mất tích đã được tạo ra. Số phần trăm càng cao, số tiền càng cao, số tiền lớn hơn sẽ được hưởng lợi.

3

@ câu trả lời của Joe dường chánh đáng, tôi chỉ cần thêm một số thông tin có thể hữu dụng:

Có một bài viết here mà sử dụng cách tính này để đưa ra một giá trị tác động thức chung:

avg_total_user_cost * avg_user_impact * (migs.user_seeks + migs.user_scans)) 

Đây là truy vấn mà họ đề xuất:

SELECT CONVERT (varchar, getdate(), 126) AS runtime, 
    mig.index_group_handle, mid.index_handle, 
    CONVERT (decimal (28,1), migs.avg_total_user_cost * migs.avg_user_impact * 
      (migs.user_seeks + migs.user_scans)) AS improvement_measure, 
    'CREATE INDEX missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + 
       CONVERT (varchar, mid.index_handle) + ' ON ' + mid.statement + ' 
       (' + ISNULL (mid.equality_columns,'') 
       + CASE WHEN mid.equality_columns IS NOT NULL 
          AND mid.inequality_columns IS NOT NULL 
        THEN ',' ELSE '' END + ISNULL (mid.inequality_columns, '') 
       + ')' 
       + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement, 
    migs.*, 
    mid.database_id, 
    mid.[object_id] 
FROM sys.dm_db_missing_index_groups AS mig 
INNER JOIN sys.dm_db_missing_index_group_stats AS migs 
    ON migs.group_handle = mig.index_group_handle 
INNER JOIN sys.dm_db_missing_index_details AS mid 
    ON mig.index_handle = mid.index_handle 
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC 

Kết quả improvement_measure là uni tless, nghĩa là chỉ hữu ích theo nghĩa tương đối, nhưng điều này sẽ giúp kết hợp các giá trị khác nhau từ dm_db_missing_index_group_stats vào một cái gì đó hữu ích để đưa ra quyết định.

Các vấn đề liên quan