执行以下两段代码
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
set statistics io,time ,PROFILE on
declare @a datetime=getdate();
select USER_ID,MAX(cur_time) from User_Location
group by USER_ID order by MAX(cur_time) desc;
select datediff(ms,@a,GETDATE());
set statistics io,time ,PROFILE off
go
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
set statistics io,time,PROFILE on
declare @b datetime=getdate();
select MAX(a.cur_time),b.USER_ID,b.User_Name from User_Location a
inner join Base_User b on a.user_id=b.user_id
group by b.USER_ID ,b.user_name order by MAX(a.cur_time) desc;
select datediff(ms,@b,GETDATE());
set statistics io,time ,PROFILE off
go
执行计划如下:
IO 信息如下
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
(18 行受影响)
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'User_Location'。扫描计数 1,逻辑读取 87 次,物理读取 4 次,预读 85 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(4 行受影响)
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 34 毫秒。
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
(18 行受影响)
表 'User_Location'。扫描计数 27,逻辑读取 579 次,物理读取 20 次,预读 344 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Base_User'。扫描计数 1,逻辑读取 3 次,物理读取 1 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(6 行受影响)
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 31 毫秒,占用时间 = 199 毫秒。
(1 行受影响)
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
---------------
大神们,请告诉我为什么,执行计划开销小的,IO和cpu却消耗的多