我正在尝试提高存储过程的性能。当我运行 SP 时,它几乎立即完成,就好像某些东西被缓存了一样。在 SSMS 中执行 SP 之前,有人告诉我使用以下两行 SQL:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
当我使用上面的两行代码运行 SP 时,SP 大约在 8 秒内完成。但是,这真的给了我真正的执行时间吗(就像我从应用程序运行它一样)?我怎么知道?
我正在尝试提高存储过程的性能。当我运行 SP 时,它几乎立即完成,就好像某些东西被缓存了一样。在 SSMS 中执行 SP 之前,有人告诉我使用以下两行 SQL:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
当我使用上面的两行代码运行 SP 时,SP 大约在 8 秒内完成。但是,这真的给了我真正的执行时间吗(就像我从应用程序运行它一样)?我怎么知道?
我最近在一个非常慢的存储过程中工作(运行了 5 分钟)。我做了一个很小的调整:
declare @tempTable table
(
...
)
insert into @tempTable
select .....
至
select ... into #tempTable from someTable
然后脚本在约 2 秒内运行。什么可以解释这个时差?
在 SSMS 中测试存储过程时,有时会说
#someTempTable____________________000000000000005B] (someField)
etc 等上缺少索引
当我像这样将它们添加到sp时:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[#someTable] ([someField])
GO
我似乎从来没有看到速度提高。所以,我经常不添加这样的索引。我应该何时添加此类索引?
我经常使用 SSMS 来测试我的慢速存储过程是否缺少索引。每当我看到“缺失索引(影响 xxx)”时,我的下意识反应就是创建新索引。据我所知,这每次都会导致更快的查询。
为什么我不应该继续这样做?
虽然数据库备份文件只有 2GB,但即使在 x64 12G RAM、i7 机器上,恢复也可能需要 15-20 分钟。当我备份从不同数据库制作的类似大小的备份文件时,还原在 3 秒内完成。备份文件只包含一个备份集(我总是选中覆盖现有数据选项)。在其他较慢的机器上,恢复需要更长的时间。
什么可能导致恢复需要这么长时间?