日期:2014-05-17  浏览次数:20411 次

SqlServer2000升级到SQL05,存储过程执行速度比2000下慢很多。
从SQLSERVER2000迁移到05之后,同一个查询存储过程,6000条数据,SQL2000执行是5秒。SQL2005执行是5分钟左右。
在05里把存储过程的WHERE条件注释后,05执行速度正常。请教是为什么啊?
没有任何改动,同一个库,同一个PROC,执行效率慢这么多。
我是备份的2000的库,然后在2005建立了一个新库,然后恢复数据库,这样操作的。数据库已经在使用,不可能再重新建库了。

------解决方案--------------------
where (@tbID=-1 or one.tbID= @tbID)
当 @tbID=-1 时 one.tbID 字段就不参与搜索,如果one.tbID没有建立索引的话,对查询就没有影响。

但是如果使用one.tbID= CASE WHEN @tbID=-1 THEN one.tbID ELSE @tbID END
的话,就不同了,当 @tbID=-1 时,还有个条件one.tbID= one.tbID 虽然不影响查询结果,但one.tbID 字段就参与搜索,如果one.tbID没有建立索引的话,就非常慢了,可能大部分时间,在table scan

你可以结合执行计划看看。

但是case when的写法不符合性能优化的原则,还是修改了好