日期:2014-05-16  浏览次数:20506 次

高分请教:3条语句的效率及资源占用问题分析,详细见帖子
有3张表
Tab_Info:存放基础信息,字段如下:
id int,
name varchar(20),
isenable int,    1为有效

Tab_infoEx:存放详细信息,字段如下:
id int,
details varchar(100)

Tab_Push:存放拥有信息,字段如下:
id int,
pushtime datetime
tarmac varchar(32)

现在要求分页(每页2条记录)取出Tab_Push中与mac匹配的的记录,并附带Tab_Info表中的基础信息以及Tab_infoEx中的详细信息,
按时间pushtime排序。

请问以下3个存储过程,功能都满足以上要求,求3个存储过程的效率以及占用资源问题分析

CREATE procedure proc_get(
@mac varchar(64),
@sortval int
) as
begin
select top 2* from (
select sortval,id,pushtime,name,details from (
select row_number()over(order by pushtime desc)as sortval,id,pushtime,name from Tab_Push inner join Tab_Info on tarmac=@mac and Tab_Push.id = Tab_Info.id and Tab_Info.isenable=1) A
inner join Tab_infoEx on A.id = Tab_infoEx.id
)B where sortval > @sortval order by sortval
end

CREATE procedure proc_get(
@mac varchar(64),
@sortval int
) as
begin
select top 2 * from (
select row_number()over(order by pushtime desc)as sortval,id,pushtime,name, details from
(Tab_Push inner join Tab_Info on tarmac=@mac and Tab_Push.id = Tab_Info.id and Tab_Info.isenable=1)
inner join Tab_infoEx on Tab_Push.id = Tab_infoEx.id     
)C where sortval > @sortval
end

CREATE procedure proc_get(
@mac varchar(64),
@sortval int
) as
begin
select sortval,id,pushtime,name, details from( 
(select top 2 * from
(select row_number()over(order by pushtime desc)as sortval, pushtime, id from Tab_Push inner join Tab_Info on tarmac=@mac and Tab_Push.id = Tab_Info.id and Tab_info.isenable=1) A
where sortval > @sortval)B  
inner join Tab_Info on B.id = Tab_Info.id )
inner join Tab_infoEx on B.id = Tab_infoEx.id
end

------解决方案--------------------
你同时调用这3个存储过程,看每个存储过程消耗的时间
------解决方案--------------------
把3个存储过程放到一个界面,然后开启实际执行计划,再运行,百分比最低的开销最低