Sql server 兼容性级别100(SQL Server 2008)的运行速度比90(SQL Server 2005)慢得多?

Sql server 兼容性级别100(SQL Server 2008)的运行速度比90(SQL Server 2005)慢得多?,sql-server,Sql Server,有人知道为什么以下脚本在兼容级别为90(SQL Server 2005)(大约40毫秒)时比在兼容级别为100(SQL Server 2008)(超过5秒)时运行得快得多吗 声明@i int=0、@x xml、@v varchar(max)='xyz',@t datetime=getdate() 而@iYeah。不同的执行计划。想知道更多吗?那么,您呢?获取执行计划并发布它们,然后要求进行分析?实际的数据库版本是什么?谢谢您的回复。我的版本是“Microsoft SQL Server 2008

有人知道为什么以下脚本在兼容级别为90(SQL Server 2005)(大约40毫秒)时比在兼容级别为100(SQL Server 2008)(超过5秒)时运行得快得多吗

声明@i int=0、@x xml、@v varchar(max)='xyz',@t datetime=getdate()

而@iYeah。不同的执行计划。想知道更多吗?那么,您呢?获取执行计划并发布它们,然后要求进行分析?实际的数据库版本是什么?谢谢您的回复。我的版本是“Microsoft SQL Server 2008 R2(SP2)-10.50.4000.0(X64)”。在XML阅读器中,这些计划有点不同,导致估计CPU速度降低了100到11倍。您可以尝试使用SQL2008,看看还能找到什么。我在脚本之前添加了“DBCC FLUSHPROCINDB(@DBID)”。执行时间为100=5173ms;90=36毫秒。100比143慢。有没有办法强迫100使用90执行计划?执行计划差异的详细信息:兼容性级别100使用:|--嵌套循环(内部联接,其中:(带XPath筛选器的XML读取器。[id]XML读取器。[id]))EstimateCPU=0.0418兼容性级别90使用:|--嵌套循环(内部联接,外部引用:(带XPath筛选器的XML读取器。[id],[Expr1054]))估计CPU=0.003762
declare @i int = 0, @x xml, @v varchar(max) = '<A><X>x</X><Y>y</Y><Z>z</Z></A>', @t datetime = getdate()

while @i<1000
begin
    set @v = @v+'<A><X>x</X><Y>y</Y><Z>z</Z></A>'
    set @i = @i+1
end

set @x = convert(xml,'<root>'+@v+'</root>')

declare @tb table (X varchar(20), Y varchar(20), Z varchar(20))

insert into @tb (X, Y, Z)
select t.c.value('X[1]', 'varchar(20)'),
    t.c.value('Y[1]', 'varchar(20)'),
    t.c.value('Z[1]', 'varchar(20)')
from @x.nodes('/root/A') AS t(c)

select count(*), datediff(ms,@t,getdate()) from @tb