gpt4 book ai didi

sql - 为什么/如何使用我的 SQL 查询变得更快?

转载 作者:行者123 更新时间:2023-12-02 06:38:50 25 4
gpt4 key购买 nike

我对一个表中的大约 1,300,000 条记录进行了查询。它获取满足某些 WHERE 条件的某些记录并将它们插入到另一个表中。它首先完全清除目标表。

每次执行完成查询所花费的时间都会大大缩短:

1st: 5 minutes, 3 seconds
2nd: 2 minutes, 43 seconds
3rd: 12 seconds
4th: 3 seconds

除了点击“执行”外,我什么都没做。我的查询看起来像这样(为了长度目的而略微缩写):

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

这是如何/为什么会发生的? SQL Server 正在做什么才能使这成为可能?

此查询将作为 SQL Server 代理作业运行,每 3 小时一次。每次都会花费整整 5 分钟,还是会更短,因为作业只运行这个查询,即使它有 3 小时的延迟?

最佳答案

如果相同的查询每次运行都变得更快,那么很有可能缓存了一些东西。那么,东西可以缓存在哪里呢?

  • SQL Server 查询计划缓存
  • SQL Server 的查询缓存
  • 操作系统 IO 缓冲区
  • 硬盘 Controller 缓存
  • 硬盘磁盘缓存

您可以在运行之间清除 SQL Server 查询缓存以查看该缓存的影响

How can I clear the SQL Server query cache?

SQL Server 将使用专用于它的任何 RAM 来将它经常访问的内容保存在 RAM 而不是磁盘上。您运行相同查询的次数越多,通常在磁盘上找到的数据就越有可能驻留在 RAM 中。

如果您希望查看操作系统级和硬件级缓存是否有助于改善结果,则最容易通过执行重启来重置它们。

如果您发布 SQL Server 用于每次执行查询的查询计划,则可能会进行更详细的诊断。

关于sql - 为什么/如何使用我的 SQL 查询变得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12152012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com