【发布时间】:2016-03-07 11:14:59
【问题描述】:
我看过这个:The Same SQL Query takes longer to run in one DB than another DB under the same server,但我仍然对此感到困惑。我已经在两个数据库上对此进行了测试,具有完全相同的查询计划,但在测试数据库上,此查询运行时间不到 20 毫秒,而在开发数据库上,这需要超过 1 分钟。
需要注意的是,在当前时间点,测试数据库与开发数据库完全相同(请注意,自提出此问题后,架构发生了轻微变化 - 请参阅编辑以获取更多信息)。我正在运行的查询是这样的:
SELECT
pn.PARTNO,
LogisticsComment,
Length,
Width,
Height,
Weight
FROM [partDB] pn
INNER JOIN [storeLines] sl
ON pn.PARTNO = sl.PARTNO
INNER JOIN [storeRequests] sr
ON sl.ITEMID = sr.LINEITEMS
WHERE sr.SERIAL = 'S14566'
这是查询执行计划:
我不知道是什么原因造成的。另外需要注意的是,该链接问题有 200 万条记录 - 此查询目前应返回 26 条记录。
编辑:抱歉耽搁了,生活有投掷曲线球的习惯。
根据要求,请查找实时系统和测试系统的 XML。
发展: PasteBin link
测试: PasteBin link
以及实时和测试系统的实际执行计划:
发展:
测试:
编辑 2: 我进行了架构比较,发现此查询中的两列“TMTPARTNO”和“LogisticsComment”具有不同的数据类型 - 在测试系统中,它们分别是 varchar(50) 和 nvarchar(1500),在 live 系统中,它们是 char(18) 和 nchar(1500)。在不更改实时系统中的数据类型的情况下,我想知道性能影响是否在于“LogisticsComment”字段使用了这么多字节?
【问题讨论】:
-
在问题中包含 实际 执行计划的 XML,用于 both 快速和慢速查询。在 SSMS 中勾选菜单查询 - 包括实际执行计划。在带有查询结果和计划的窗口中,右键单击并显示执行计划 XML。
-
所以,只是指出 - 你提到数据库是相同的,但最后你说它们不是。我会更深入地挖掘其他细微的差异。也许运行 generate scripts 命令并使用 diff 工具比较输出。
-
关于downvote,本站对于SQL性能是否“编程”存在一些冲突。我支持它,因为这种质量的帖子很少见!
-
我设法打开了第一个计划(但不是第二个 - 出现 xml 错误)。如果您捕获 实际 计划,也可能会提供信息,这意味着按 查询 然后 包括实际执行计划。然后运行您的查询。例如,您会在计划中看到“估计行数”和“实际行数”。
-
我还建议您将 prod 更改应用回测试,看看它是否会引入问题。
标签: sql-server database join indexing