sql中多表查询

create table Testing

(

    ID int identity(1,1) primary key nonclustered,

    Data float not null default 0,

    Style smallint not null default 0,

    AddTime DateTime not null default getdate(),

    Data2 float not null default 0,

    Data3 float not null default 0,

    Data4 float not null default 0,

    Data5 float not null default 0,

    Data6 float not null default 0,

    Data7 float not null default 0,

) 



declare @j int

declare @data float

declare @style smallint

set @j = 1

while @j<5000000

    begin

       set @data = floor(rand()*100000.0000)

       set @style = CAST(rand() * 6 as smallint)

       insert into Testing(Data, Style, AddTime) values(@data,@style,getdate())

    set @j = @j + 1

end 



declare @d datetime

set @d = getdate()

declare   @i   int



 



-------------------------------------------------------------------------------------

set   @i=0

while   @i <20

begin

    select top 1 * from Testing with(readpast) where [AddTime]>=(select max([AddTime]) from Testing with(readpast) where [Style]=0)

    select top 1 * from Testing with(readpast) where [AddTime]>=(select max([AddTime]) from Testing with(readpast) where [Style]=0)

    set   @i   =   @i+1

end

-------------------------------------------------------------------------------------

select [语句执行时间(毫秒)]=datediff(ms, @d, getdate())

print '全部1 语句执行时间(毫秒):' + CONVERT(varchar(30), datediff(ms, @d, getdate()))

 



--=======================================================================================

set @d = getdate()

-------------------------------------------------------------------------------------

set   @i=0

while   @i <20

begin

    select top 1 * from Testing with(readpast) where [AddTime]>=(select max([AddTime]) from Testing with(readpast) where [Style]=0)

    union all

    select top 1 * from Testing with(readpast) where [AddTime]>=(select max([AddTime]) from Testing with(readpast) where [Style]=0)

set   @i   =   @i+1

end

-------------------------------------------------------------------------------------

select [语句执行时间(毫秒)]=datediff(ms, @d, getdate())

print '全部2 语句执行时间(毫秒):' + CONVERT(varchar(30), datediff(ms, @d, getdate())) 

 



--=======================================================================================



set @d = getdate()

-------------------------------------------------------------------------------------

set   @i=0

while   @i <20

begin

    select top 1 Data from Testing with(readpast) where [AddTime]>=(select max([AddTime]) from Testing with(readpast) where [Style]=0)

    select top 1 Data from Testing with(readpast) where [AddTime]>=(select max([AddTime]) from Testing with(readpast) where [Style]=0)

    set   @i   =   @i+1

end

-------------------------------------------------------------------------------------

select [语句执行时间(毫秒)]=datediff(ms, @d, getdate())

print '截取1 语句执行时间(毫秒):' + CONVERT(varchar(30), datediff(ms, @d, getdate()))

 



--=======================================================================================



set @d = getdate()

-------------------------------------------------------------------------------------

set   @i=0

while   @i <20

begin

    select top 1 Data from Testing with(readpast) where [AddTime]>=(select max([AddTime]) from Testing with(readpast) where [Style]=0)

    union all

    select top 1 Data from Testing with(readpast) where [AddTime]>=(select max([AddTime]) from Testing with(readpast) where [Style]=0)

set   @i   =   @i+1



end



-------------------------------------------------------------------------------------



select [语句执行时间(毫秒)]=datediff(ms, @d, getdate())

print '截取2 语句执行时间(毫秒):' + CONVERT(varchar(30), datediff(ms, @d, getdate()))

 



结论,查询越少的字段速度越快,多条sql语句比组合成单条要慢

你可能感兴趣的:(sql)