如果我檢查[deliverybody]字段是否包含'x',以消除具有'x'的行,第一個/非緩存查詢需要很長時間。如果我不檢查'x',[deliverytime]被索引並在第二秒完成查詢。索引字段不會幫助:如何提高查詢時間
With 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
- 快速的執行計劃,作爲保存:http://pastebin.com/EEnPGf4X
查詢在第二個完成:
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())
列出hm_deliverylog'上的所有索引和它們的列' – RichardTheKiwi
什麼是th輸出'SET STATISTICS IO ON';然後運行每個查詢?和執行計劃? –
[來自MSDN](http://msdn.microsoft.com/zh-cn/library/ms187993.aspx):*重要 在將來的版本中,ntext,文本和圖像數據類型**將被刪除** SQL Server。 **避免在新的開發工作中使用這些數據類型**,並計劃修改當前正在使用它們的應用程序。使用nvarchar(max),varchar(max)和varbinary(max)代替。* –