実際の実行プランを見ると、クエリの所要時間が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
わかりました...それで十分ですか?
—
エリックダーリン
アカウントテーブルとしての速いが900 rows.andアカウントfeaturesettingは21385行ありましたので、私は思う
—
somu
実際にテストデータベースにある行の100倍以上の行を追加し、実際の実行計画を投稿するとします。次に、このインデックスを追加した後にもう一度投稿すると、他の人がこのインデックスを適用しないか、または適用しない理由がわかります。
—
Magier 2017年