【发布时间】:2015-03-18 10:03:12
【问题描述】:
我对 SQL 数据库非常有经验,但主要是使用 Oracle 和 MySQL。
现在我正在处理 SQL Server 2012 (Management Studio 2008) 并面临我无法解释的奇怪行为。
考虑这 3 个查询和一个由 400k 行组成的原始表:
SELECT ID_TARJETA
INTO [SGMENTIA_TEMP].[dbo].[borra_borra_]
FROM [DATAMART_SEGMENTIA].[DESA].[CLIENTES]
ALTER TABLE [SGMENTIA_TEMP].[dbo].[borra_borra_]
ADD PRIMARY KEY (ID_TARJETA)
SELECT COUNT(*)
FROM [SGMENTIA_TEMP].[dbo].[borra_borra_]
如果我一个接一个地运行它们,它运行正常。 (总计:~7sec)。
如果我全部选择它们并运行所有查询一次它运行不好。 (总计:~60sec)
最后,如果我把它全部包装起来用一个事务它再次运行正常
BEGIN TRANSACTION;
SELECT ID_TARJETA
INTO [SGMENTIA_TEMP].[dbo].[borra_borra_]
FROM [DATAMART_SEGMENTIA].[DESA].[CLIENTES]
ALTER TABLE [SGMENTIA_TEMP].[dbo].[borra_borra_]
ADD PRIMARY KEY(ID_TARJETA)
SELECT COUNT(*)
FROM [SGMENTIA_TEMP].[dbo].[borra_borra_]
COMMIT;
整个画面对我来说毫无意义,考虑到创建事务看起来相当昂贵,第一个场景应该是一个缓慢的场景,而第二个场景应该工作得更好,我错了吗?
这个问题对我来说非常重要,因为我正在以编程方式 (jdbc) 构建这类查询包,我需要一种方法来调整其性能。
【问题讨论】:
-
请检查查询选项 -> 高级对话框中的 SET STATISTICS IO 和 SET STATISTICS TIME。另外,查看实际的执行计划。