百萬資料查詢測試 只需1秒--Sql語句效率測試

iSQlServer發表於2009-08-13


關於SQL查詢效率,100w資料,查詢只要1秒,與您分享: 

機器情況 
p4: 2.4 
記憶體: 1 G 
os: windows 2003 
資料庫: ms sql server 2000 
目的: 查詢效能測試,比較兩種查詢的效能 

SQL查詢效率 step by step 

-- setp 1. 
-- 建表 
create table t_userinfo 

userid int identity(1,1) primary key nonclustered, 
nick varchar(50) not null default '', 
classid int not null default 0, 
writetime datetime not null default getdate() 

go 

-- 建索引 
create clustered index ix_userinfo_classid on t_userinfo(classid) 
go 

-- step 2. 

declare @i int 
declare @k int 
declare @nick varchar(10) 
set @i = 1 
while @i<1000000 
begin 
set @k = @i % 10 
set @nick = convert(varchar,@i) 
insert into t_userinfo(nick,classid,writetime) values(@nick,@k,getdate()) 
set @i = @i + 1 
end 
-- 耗時 08:27 ,需要耐心等待 

-- step 3. 
select top 20 userid,nick,classid,writetime from t_userinfo 
where userid not in 

select top 900000 userid from t_userinfo order by userid asc 


-- 耗時 8 秒 ,夠長的 

-- step 4. 
select a.userid,b.nick,b.classid,b.writetime from 

select top 20 a.userid from 

select top 900020 userid from t_userinfo order by userid asc 
) a order by a.userid desc 
) a inner join t_userinfo b on a.userid = b.userid 
order by a.userid asc 

-- 耗時 1 秒,太快了吧,不可以思議 

-- step 5 where 查詢 
select top 20 userid,nick,classid,writetime from t_userinfo 
where classid = 1 and userid not in 

select top 90000 userid from t_userinfo 
where classid = 1 
order by userid asc 

-- 耗時 2 秒 

-- step 6 where 查詢 
select a.userid,b.nick,b.classid,b.writetime from 

select top 20 a.userid from 

select top 900000 userid from t_userinfo 
where classid = 1 
order by userid asc 
) a order by a.userid desc 
) a inner join t_userinfo b on a.userid = b.userid 
order by a.userid asc 

-- 查詢分析器顯示不到 1 秒. 

查詢效率分析: 
子查詢為確保消除重複值,必須為外部查詢的每個結果都處理巢狀查詢。在這種情況下可以考慮用聯接查詢來取代。 

如果要用子查詢,那就用EXISTS替代IN、用NOT EXISTS替代NOT IN。因為EXISTS引入的子查詢只是測試是否存在符合子查詢中指定條件的行,效率較高。無論在哪種情況下,NOT IN都是最低效的。因為它對子查詢中的表執行了一個全表遍歷。 

建立合理的索引,避免掃描多餘資料,避免表掃描! 
幾百萬條資料,照樣幾十毫秒完成查詢.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-612107/,如需轉載,請註明出處,否則將追究法律責任。

相關文章