我一直在查询中运行一些速度测试,我在其中将10,000条记录插入到具有数百万(超过24mil)记录的表中。查询(如下)不会插入重复记录。
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查询。关键是,我运行的每个测试都执行完全相同的脚本。
执行时间从几秒钟到几分钟左右反弹,如:
我觉得有趣的一个指标是秒/分钟交替序列相对一致 - 即每隔一次测试结果都是以秒为单位。
您能否提供一些线索,说明可能导致此查询出现这种零星执行时间的原因?
答案 0 :(得分:1)
我希望我能说出零星执行时间的原因是什么,但我可以说我为解决这个问题所做的工作......
我创建了一个新的数据库和目标表,并向目标表添加了2500万条记录。然后,我通过在目标表中重复插入10k记录,在新数据库/表上运行原始测试。结果是aprox 0:07秒的一致执行时间(每10k插入一次)。
对于踢,我在CPU /内存比我的开发笔记本电脑多两倍的机器上进行了完全相同的测试。结果是0:00秒的一致执行时间(这是新的开发机器的时间;))
我不喜欢没有发现问题的原因,但在这种情况下,我将不得不称之为好并继续前进。希望有一天,一个StackO顽固的人可以用一个好的答案更新这个问题。