在最近的 Sql server 从 Sql server 2005 升级到 2008 r2 后,我看到了奇怪的行为。在升级之前,下面的查询在亚秒内运行,但现在升级后需要 10 秒。两个表都有数百万行..
模型表中的可空列 colB 上有索引。下面的查询显然是在进行索引扫描,因为在 Join 子句中使用了标量函数 isnull..
select distinct a.colA
from ptransaction a
inner join model b on ISNULL(b.colB,0) = a.colB
where a.transid = 234
我没有任何升级前计划信息,但此查询从未运行超过 1 秒。所以不确定 Sql server 2008 中的优化器行为是否发生了变化,导致其运行缓慢。
我知道替代解决方案,但不想匆忙修改架构。我知道我可以将模型中的 colB 转换为 notnull 来解决这个问题。其他解决方案是创建可以解决此问题的索引计算列。我们环境中的架构更改并不容易,所以想探索这里的 Sql 大师是否有一些想法或其他不需要架构更改的解决方案。我仍然无法理解优化器或整体 sql server 升级如何使这个查询变得更糟。任何帮助表示赞赏。
新泽西州