--构造数据
Create table Ta(ID int,C1 varchar(10))
declare @ID int
set @ID=1
while(@ID<=10000)
begin
Insert into Ta(ID,C1)
values(@ID,'AAAAAAAAAA')
set @ID=@ID+1
end--查询1:
declare @N int
set @N=1
select * from Ta A,Ta B where A.ID=B.ID-@N order by 1--查询2:
select * from Ta A,Ta B where A.ID=B.ID-1 order by 1
查询1要比查询2慢了几十倍,为什么会这样?
请教一下!

解决方案 »

  1.   

    declare @N int
    set @N=1
    定义变量同时赋值需要时间
      

  2.   

    大概是这样的,快的那个,根据B.ID-1生成哈希表,用A.ID进行匹配,匹配时间复杂度永远是O(1)
    慢的那个则要对每个B.ID-@N生成的值去A中循环查找,匹配时间应该是O(n)
      

  3.   

    declare @N varchar(1) set @N='1'
    exec('select * from Ta A,Ta B where A.ID=B.ID-'+@N+' order by 1')