Kế hoạch thực hiện hiển thị chỉ mục bị thiếu nhưng truy vấn nhanh


8

Trong khi xem xét một kế hoạch thực hiện thực tế, nó hiển thị các chỉ mục bị thiếu mặc dù truy vấn chỉ mất chưa đến 1 giây.

SELECT
    Account.AccountID,
    Account.Name
FROM
    account      
    LEFT OUTER JOIN accountfeaturesetting afs 
ON afs.accountid = account.accountid   
and afs.featureid = 'Schedules'
 and  
afs.settingid = 'EditReasons'           
WHERE
    ISNULL(afs.Value, '0') = '0'  
    AND EXISTS 
(SELECT 1 FROM program WHERE program.AccountID = account.AccountID
 AND program.Active = 1 
AND (program.ScheduleEditReasonFlags <> 0 
OR program.ScheduleEditReasonFields <> 0))
    AND account.IsMaster = 0
    AND account.BeginDate IS NOT NULL

Kế hoạch thực hiện đang hiển thị:

CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Account] ([IsMaster],[BeginDate])
INCLUDE ([AccountID],[Name])

Chúng ta có cần tạo chỉ mục mặc dù truy vấn chỉ mất 1 giây không? Trên cơ sở nào một chỉ số nên được tạo ra?

Tôi sẽ chạy truy vấn này như một công việc hàng ngày.


1
Là một giây đủ nhanh?
Erik Darling

Mất ít hơn 1 giây
somu

4
Được rồi ... như vậy là đủ nhanh?
Erik Darling

Tôi nghĩ nó nhanh như vậy vì bảng tài khoản có 900 hàng. Và tính năng tài khoản có
21385

1
Tôi muốn nói thêm nhiều hàng hơn 100 lần so với thực tế bạn có trong một db thử nghiệm và Đăng Kế hoạch thực thi thực tế. sau đó Đăng lại sau khi bạn thêm chỉ mục này và bạn sẽ thấy và biết lý do tại sao những người khác sẽ gia hạn hoặc không áp dụng chỉ mục này.
Magier

Câu trả lời:


15

Bạn không cần thêm chỉ mục ngay bây giờ. Tất cả các thông báo "chỉ mục bị thiếu" có nghĩa là điều này thể hữu ích. Nó có thể không trung thực, hoặc có thể có một chỉ số giúp nhiều hơn nữa.

Khi nào bạn cần thêm chỉ mục mới? Hãy giả sử bạn có 100 hàng trong bảng tài khoản nhưng nó chưa thực sự được sử dụng. Trong một vài tháng, bạn có tới 10.000 hàng và truy vấn hiện mất nửa giờ trở lên. Tại thời điểm đó, bạn có thể xem xét thêm chỉ mục. Và khi tôi nói cân nhắc, tôi có nghĩa là thử nghiệm nó trong một môi trường thử nghiệm và xem liệu nó có thực sự cải thiện mọi thứ không.

Những cân nhắc khác bao gồm:

  • Tôi đã có bao nhiêu chỉ mục trên bảng này? Nếu bạn có hơn 10 chỉ mục thì tôi sẽ quan tâm nhiều hơn nếu bạn nói 2.
  • Truy vấn này quan trọng như thế nào? Bạn nói rằng bạn đang chạy nó mỗi đêm. Trong 1 giây là ổn (giả sử bạn chỉ chạy một lần). Mặt khác, nếu đó là một phần của một quá trình và được chạy 1000 lần mỗi đêm thì đó có thể là một vấn đề. Nếu nó đến thời điểm đủ lâu để gây ra sự cố cho bạn (gây ra sự cố với quy trình khác hoặc gặp phải thời gian khi người dùng ở trong hệ thống, v.v.) thì bạn cần xem hiệu suất và thêm chỉ mục.

Cũng đáng để hỏi bạn có bao nhiêu tài khoản. Nếu bạn đang nhận đơn đặt hàng cho máy bay phản lực, bạn có thể không có lượng khách hàng lớn như vậy, nhưng nếu đó là trang web truyền thông xã hội, mục tiêu chính của bạn là đưa số lượng đó lên hàng triệu càng nhanh càng tốt. Một điều nữa - Trong một số trường hợp, tôi sẽ nghiêng về việc lập chỉ mục ngay bây giờ để tôi không phải tìm kiếm điều gì làm cho ứng dụng chậm lại một năm sau khi số lượng tài khoản bị mất vì một số lý do.
msouth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.