【发布时间】:2023-03-15 16:03:01
【问题描述】:
我一直在对一个查询进行一些速度测试,其中我将 10,000 条记录插入到一个包含数百万(超过 2400 万)条记录的表中。查询(下)不会插入重复记录。
MERGE INTO [dbo].[tbl1] AS tbl
USING (SELECT col2,col3, max(col4) col4, max(col5) col5, max(col6) col6 FROM #tmp group by col2, col3) AS src
ON (tbl.col2 = src.col2 AND tbl.col3 = src.col3)
WHEN NOT MATCHED THEN
INSERT (col2,col3,col4,col5,col6)
VALUES (src.col2,src.col3,src.col4,src.col5,src.col6);
上述查询的执行次数是零星的;范围从 0:02 秒到 2:00 分钟。
我正在 SQL Server Studio 中通过脚本运行这些测试,该脚本将创建 10,000 行数据(到 #tmp 表中),然后触发上面的 MERGE 查询。关键是,我运行的每个测试都在执行相同的脚本。
执行时间从几秒到几分钟跳动,如下所示:
- 测试 #1:0:10 秒
- 测试 #2:1:13 分钟
- 测试 #3:0:02 秒
- 测试 #4:1:56 分钟
- 测试#5:0:05 秒
- 测试 #6:1:22 分钟
我觉得有趣的一个指标是秒/分钟交替序列相对一致 - 即每隔一个测试结果以秒为单位。
你能告诉我什么可能导致这个查询有如此零星的执行时间吗?
【问题讨论】:
-
您是否排除了其他可能性:网络延迟、DB 偶尔会非常忙于服务其他请求等?
-
这看起来非常熟悉my question。我很想看看你是否知道发生了什么。
-
@Jeff - 数据库与 SQL Studio 位于同一台机器上,因此不必担心网络延迟,不是吗?至于排除其他可能性,我什至不知道从哪里开始寻找。
-
@Jerad - 我一定会回发我认为值得一提的任何内容。
标签: sql tsql sql-server-2008