[deliverybody]フィールドに「x」が含まれているかどうかを確認して「x」の行を削除すると、最初の/キャッシュされていないクエリに時間がかかります。'x'をチェックしないと、[deliverytime]にインデックスが付けられ、クエリが1秒で完了します。
AND [ deliverybody] <>'x'の部分がある場合、クエリの実行時間は10秒以上です。1秒。インデックス付きフィールド[deliverytime]はあまり役に立たないようです。
クエリは1600行のみを返します。追加の1600フィールドのスキャンには、10秒以上かかります。クエリの何が問題になっていますか?
更新: NTEXTからNVARCHAR(MAX)にアップグレードされました。内部クエリの実行プラン:
- 保存されたSLOW実行プラン:http://pastebin.com/7X7uf6iV
このクエリには10秒以上かかります。
SELECT MAX([deliveryid]) AS deliveryid, COUNT(*) AS cnt
FROM [_hMaiServer].[dbo].[hm_deliverylog]
WHERE [deliverytime] > DATEADD(HOUR, -24, GETDATE())
AND [deliverybody] <> 'x'
GROUP BY deliverysubject
- 保存されたFAST実行プラン:http://pastebin.com/EEnPGf4X
クエリは1秒で完了しました:
SELECT MAX([deliveryid]) AS deliveryid, COUNT(*) AS cnt
FROM [_hMaiServer].[dbo].[hm_deliverylog]
WHERE [deliverytime] > DATEADD(HOUR, -2400, GETDATE())
--AND [deliverybody] <> 'x'
GROUP BY deliverysubject
そしてインデックス付きのテーブル構造:http: //pastebin.com/W0PsDnqS
私の結論:
5000行のチェックには10秒以上かかります。{HOUR}の値を小さくすると、実行時間が速くなります。これで問題ない場合は問題ありませんが、私には遅いようです。
SELECT COUNT(*) FROM [hm_deliverylog]
WHERE [deliverybody] <> 'x'
AND [deliverytime] > DATEADD(HOUR, -__{HOUR}__ , GETDATE())