実行プランで不足しているインデックスが表示されているがクエリが高速


8

実際の実行プランを見ると、クエリの所要時間が1秒未満であっても、インデックスが不足していることがわかります。

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

実行計画は次のとおりです。

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

クエリに1秒しかかからない場合でも、インデックスを作成する必要がありますか?どのような基準でインデックスを作成する必要がありますか?

このクエリを毎日実行します。


1
1秒で十分ですか?
エリックダーリン

1秒もかかりません
somu

4
わかりました...それで十分ですか?
エリックダーリン

アカウントテーブルとしての速いが900 rows.andアカウントfeaturesettingは21385行ありましたので、私は思う
somu

1
実際にテストデータベースにある行の100倍以上の行を追加し、実際の実行計画を投稿するとします。次に、このインデックスを追加した後にもう一度投稿すると、他の人がこのインデックスを適用しないか、または適用しない理由がわかります。
Magier 2017年

回答:


15

現在、インデックスを追加する必要はありません。「インデックスがありません」というメッセージは、これ役立つ可能性があることを意味しています。それは正直ではないかもしれません、またはさらに役立つインデックスがあるかもしれません。

新しいインデックスを追加する必要があるのはいつですか?アカウントテーブルに100行あるが、まだ実際には使用されていないとしましょう。数か月で最大10,000行になり、クエリは30分以上かかります。その時点で、インデックスを追加することを検討します。そして、私が考えるとは、テスト環境でテストして、実際に改善されるかどうかを確認することです。

その他の考慮事項は次のとおりです。

  • このテーブルにはすでにいくつのインデックスがありますか?インデックスが10個以上ある場合は、2と言った場合よりも心配します。
  • このクエリはどのくらい重要ですか?あなたは毎晩それを実行していると言います。1秒で問題ありません(一度だけ実行するとします)。一方、それがプロセスの一部であり、毎晩数千回実行されている場合は、それが問題になる可能性があります。問題が発生するまでに時間がかかる(別のプロセスで問題が発生したり、ユーザーがシステムにいるときに実行されたりする)場合は、パフォーマンスを調べてインデックスを追加する必要があります。

また、アカウントがいくつあると予想されるかを尋ねてみる価値もあります。ジェット旅客機の注文を受けている場合、顧客ベースはそれほど多くないかもしれませんが、ソーシャルメディアサイトの場合、主な目標は、その数を数百万人にできるだけ早く獲得することです。さらにもう1つ-場合によっては、インデックスを作成することに傾倒して、なんらかの理由で1年後にアカウント数が減少したときに、アプリケーションが遅くなる原因を探す必要がないようにします。
msouth 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.