我使用的是SQL Server 2008,我注意到在运行这两个几乎相同的查询时性能存在巨大差异。
快速查询(只需不到一秒钟):
SELECT Season.Description, sum( Sales.Value ) AS Value
FROM Seasons, Sales
WHERE Sales.Property05=Seasons.Season
GROUP BY Seasons.Description
慢查询(大约需要5分钟):
SELECT Season.Description, sum( Sales.Value ) AS Value
FROM Seasons, Sales
WHERE Sales.Property04=Seasons.Season
GROUP BY Seasons.Description
唯一的区别是表SALES和SEASONS在快速查询中加入Property05,在慢速查询中加入Property04。
这两个属性字段都不在密钥中,也不在索引中,所以我真的不明白为什么两个查询之间的执行计划和性能如此不同。
有人可以启发我吗?
编辑:查询是由商业智能程序自动生成的,所以我没有权力。我通常会使用JOIN ON sintax,虽然我不知道这是否有所作为。
慢查询计划:https://www.brentozar.com/pastetheplan/?id=HkcBc7gXZ
快速查询计划:https://www.brentozar.com/pastetheplan/?id=rJQ95mgXb
请注意,上面的查询已简化为必要部分。查询计划更详细。