效率问题

select top 3 * from all_data where id not in (select top 2 id from all_data order by id) order by id

DECLARE @BEGINROW INT,@ENDROW INT,@COUNTS INT,@COUNTS1 INT
SET @BEGINROW=300
SET @ENDROW=40
SELECT @COUNTS=@ENDROW-@BEGINROW+1
SELECT @COUNTS1=@BEGINROW-1
EXEC('SELECT TOP '+@COUNTS+
' * FROM all_data WHERE ID NOT IN (SELECT TOP '+@COUNTS1+' ID FROM all_data)')
为什么上句明显比下句慢很多
[462 byte] By [wth1150-@疯癫行者$] at [2008-4-13]
# 1
不会吧?

那你这样比呢
exec('select top 3 * from all_data where id not in (select top 2 id from all_data order by id) order by id')
# 2
执行下就知道。两句是一样,我也觉得怪
wth1150-@疯癫行者$ at 2007-10-22 > top of Msdn China Tech,MS-SQL Server,应用实例...
# 3
可能有共享锁
jaway-无限渴望 at 2007-10-22 > top of Msdn China Tech,MS-SQL Server,应用实例...
# 4
慢可能是因为你用的是动态sql,对于动态sql,ms sql server是没办法进行优化和预编译的
yuehaiyang at 2007-10-22 > top of Msdn China Tech,MS-SQL Server,应用实例...
# 5
不太明白。能清楚点解释吗
wth1150-@疯癫行者$ at 2007-10-22 > top of Msdn China Tech,MS-SQL Server,应用实例...
# 6
理论上应该是下面的语句执行速度比较慢才对。
47522341-睡到8:30 at 2007-10-22 > top of Msdn China Tech,MS-SQL Server,应用实例...
# 7
不清楚是怎么回事
wuya8115-无涯 at 2007-10-22 > top of Msdn China Tech,MS-SQL Server,应用实例...