以兼容级别80运行SQL Server 2005数据库是否会对性能产生负面影响?

时间:2020-03-05 18:38:51  来源:igfitidea点击:

我们的软件必须能够在SQL Server 2000和2005上运行。为了简化开发,我们以兼容级别80运行SQL Server 2005数据库。但是,在某些情况下,SQL 2005的数据库性能似乎比SQL 2000慢(我们尚未使用基准进行确认)。将兼容性级别升级到90会提高SQL 2005服务器的性能吗?

解决方案

回答

在将数据库移至2005年之后,我们

通过全面扫描更新统计信息?
重建索引?

首先尝试一下,然后再次检查性能

回答

也是一个仅供参考,如果我们运行兼容级别90,则不再支持某些功能,例如旧式外部联接`(**和= *)

回答

我们在查询中使用子选择吗?

根据我的经验,在SQL Server 2000上运行良好的带有子选择的SELECT语句可以在SQL Server 2005上进行爬网(速度可能慢10倍!)。

做一个实验,重新编写一个查询以消除子选择,并查看其性能如何变化。

回答

我想我在某处读过,SQL Server 2005数据库引擎应该比SQL Server 2000引擎快30%。可能是,我们必须在兼容模式90下运行数据库才能获得这些好处。

但是我偶然发现了两种情况,与mssql 2000相比,使用mssql 2005时性能可能会大大下降:

  • 参数嗅探:当使用存储过程时,sql server会在当时精确计算一个执行计划,我们首先调用该过程。执行计划取决于为该调用指定的参数值。在我们的例子中,通常花费约10秒的过程在mssql 2005下运行了几个小时。在这里和这里看看。
  • 使用分布式查询时,mssql 2005在有关远程服务器上排序顺序的假设方面表现出不同。默认行为是,服务器将查询中涉及的整个远程表复制到本地tempdb,然后在本地执行联接。解决方法是使用OPENQUERY,我们可以在其中精确控制从远程服务器传输的结果集。