34,576
社区成员
发帖
与我相关
我的任务
分享
dbcc freeproccache
dbcc dropcleanbuffers
set statistics time on
select * from dgmocpb where pb039='2010-02-01'
union all
select * from dgmocpb where pb039='2010-02-02'
union all
select * from dgmocpb where pb039='2010-02-03'
union all
select * from dgmocpb where pb039='2010-02-04'
union all
select * from dgmocpb where pb039='2010-02-05'
set statistics time off
/*
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請聯絡您的系統管理員。
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請聯絡您的系統管理員。
(2016 個資料列受到影響)
SQL Server 執行次數:
CPU 時間 = 16 ms, 經過時間 = 1214 ms。
*/
dbcc freeproccache
dbcc dropcleanbuffers
set statistics time on
select * from dgmocpb where pb039>='2010-02-01' and pb039<='2010-02-05'
set statistics time off
/*
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請聯絡您的系統管理員。
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請聯絡您的系統管理員。
SQL Server 剖析與編譯時間:
CPU 時間 = 0 ms,經過時間 = 1 ms。
(2016 個資料列受到影響)
SQL Server 執行次數:
CPU 時間 = 0 ms, 經過時間 = 1354 ms。
*/
dbcc freeproccache
dbcc dropcleanbuffers
set statistics time on
select * from dgmocpb where pb039 in ('2010-02-01','2010-02-02',
'2010-02-03','2010-02-04','2010-02-05'
)
set statistics time off
/*
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請聯絡您的系統管理員。
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請聯絡您的系統管理員。
(2016 個資料列受到影響)
SQL Server 執行次數:
CPU 時間 = 0 ms, 經過時間 = 1285 ms。
*/
if object_id('id') is null drop table tb
go
create table tb(id int, name varchar(1),date datetime)
insert into tb select rand()*10,char(cast(rand()*26+97 as int)),getdate()
go 1000000 --产生100百万测试数据.这个效率很低,但是我很懒
--创建索引
create index ix_name on tb(name)
--清空缓存
checkpoint
dbcc freeproccache
dbcc dropcleanbuffers
--测试in的时间
set statistics time on
SELECT *FROM tb with (index=ix_name) WHERE name IN('a','b','c','d')
set statistics time off
/*
(153362 行受影响)
SQL Server 执行时间:
CPU 时间 = 594 毫秒,占用时间 = 5398 毫秒。
*/
--测试并行
--再次清空缓存
checkpoint
dbcc freeproccache
dbcc dropcleanbuffers
set statistics time on
--SELECT *FROM tb WHERE name IN('a','b','c','d')
SELECT * FROM tb with (index=ix_name) WHERE name='a'
union all
SELECT * FROM tb with (index=ix_name) WHERE name='b'
union all
SELECT * FROM tb with (index=ix_name) WHERE name='c'
union all
SELECT * FROM tb with (index=ix_name) WHERE name='d'
set statistics time off
/*
SQL Server 执行时间:
CPU 时间 = 548 毫秒,占用时间 = 1942 毫秒。
*/
--不强制使用索引,它仍走的是表扫描
--强制试用索引,in所消耗的时间明显增加,第二种时间到有所减少
if object_id('id') is null drop table tb
go
create table tb(id int, name varchar(1),date datetime)
insert into tb select rand()*10,char(cast(rand()*26+97 as int)),getdate()
go 1000000 --产生100百万测试数据.这个效率很低,但是我很懒
--测试in的时间
set statistics time on
SELECT *FROM tb WHERE name IN('a','b','c','d')
set statistics time off
/*
(153362 行受影响)
SQL Server 执行时间:
CPU 时间 = 969 毫秒,占用时间 = 1995 毫秒。
(153362 行受影响)
*/
--测试二
set statistics time on
SELECT * FROM tb WHERE name='a'
union all
SELECT * FROM tb WHERE name='b'
union all
SELECT * FROM tb WHERE name='c'
union all
SELECT * FROM tb WHERE name='d'
set statistics time off
/*
SQL Server 执行时间:
CPU 时间 = 1609 毫秒,占用时间 = 2037 毫秒。
*/
--很明顯拆分得到是多個結果集合
--覺得樓主應該比較的是這樣
SELECT *FROM shoushou WHERE NB IN('a','b','c','d')
--與
SELECT *FROM shoushou WHERE NB='a'
union all
SELECT *FROM shoushou WHERE NB='b'
union all
SELECT *FROM shoushou WHERE NB='c'
union all
SELECT *FROM shoushou WHERE NB='d'
--樓主可以在NB建立索引測試下看看