Cpt*_*rkt 2 sql sql-server query-optimization
我在一个表中运行了大约1,300,000条记录的查询.它需要满足某些WHERE条件的某些记录并将它们插入另一个表中.它首先完全清除目标表.
每次执行时,完成查询所需的时间会大大改善:
1st: 5 minutes, 3 seconds
2nd: 2 minutes, 43 seconds
3rd: 12 seconds
4th: 3 seconds
Run Code Online (Sandbox Code Playgroud)
除了点击Execute之外我什么也没做.我的查询看起来像这样(有些缩写用于长度目的):
DELETE FROM dbo.ConsolidatedLogs --clear target table
DECLARE @ClientID int
DECLARE c CURSOR FOR SELECT ClientID FROM dbo.Clients
OPEN c
FETCH NEXT FROM c INTO @ClientID --foreach LogID
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO dbo.ConsolidatedLogs
(col1, col2)
SELECT col1, col2
FROM dbo.CompleteLogsRaw
WHERE col3 = true AND
ClientID = @ClientID
FETCH NEXT FROM c INTO @ClientID
END
CLOSE c
DEALLOCATE c
Run Code Online (Sandbox Code Playgroud)
这是怎么发生的?什么是SQL Server正是为了实现这一目标?
此查询将作为SQL Server代理作业运行,每3小时一次.每次需要整整5分钟,还是会缩短,因为作业只运行这一个查询,即使它有3个小时的延迟?
如果每次运行时相同的查询变得更快,那么很有可能会缓存事物.那么,哪些东西可以被缓存?
您可以在运行之间清除SQL Server查询缓存,以查看该缓存的影响
SQL Server将使用专用于它的任何RAM来保存它经常在RAM而不是磁盘上访问的内容.运行相同查询的次数越多,通常在磁盘上找到的数据可能会驻留在RAM中.
如果您希望查看它们是否有助于改善结果,则可以通过执行重新启动来轻松重置操作系统级别和硬件级别缓存.
如果您发布SQL Server每次执行查询时使用的查询计划,则可以进行更详细的诊断.
| 归档时间: |
|
| 查看次数: |
864 次 |
| 最近记录: |