22,206
社区成员
发帖
与我相关
我的任务
分享
-- 首先建立一个存储过程
CREATE PROCEDURE [dbo].[GetHotCompany]
@dt date,@ca int
AS
BEGIN
SET NOCOUNT ON;
select top 10 co_id,c_name from (
select db,tb,pk,count(0) as clicks from caigou_tj.dbo.PageViewBase a with (nolock)
where db=15 and tb=1419152101 and datediff(d,dt,@dt) between 0 and 1
group by db,tb,pk
) a
inner join caigou_2017.dbo.pub_company pa with (nolock) on pa.co_id=a.pk
inner join caigou_2017_query.dbo.query q with (nolock) on q.db=a.db and q.tb=a.tb and pa.c_id=q.pk
where @ca=0 or exists(select top 1 1 from caigou_2017_query.dbo.query q1 with (nolock) where c_id=q.pk and db=15 and tb=907150277 and exists(select top 1 1 from caigou_2017_query.dbo.query_path with (nolock) where qid=q1.id and col='ca' and val=@ca))
order by a.clicks desc
END
-- 初始化变量
declare @dt date,@ca int
select @ca=2172,@dt = convert(date,(select top 1 dt from caigou_tj.dbo.PageViewBase with (nolock) where dt<=getdate() order by dt desc))
-- 执行刚建立的存储过程
exec caigou_2017_query.dbo.GetHotCompany @dt,@ca
-- 直接执行语句,该语句与存储过程中的语句一模一样
select top 10 co_id,c_name from (
select db,tb,pk,count(0) as clicks from caigou_tj.dbo.PageViewBase a with (nolock)
where db=15 and tb=1419152101 and datediff(d,dt,@dt) between 0 and 1
group by db,tb,pk
) a
inner join caigou_2017.dbo.pub_company pa with (nolock) on pa.co_id=a.pk
inner join caigou_2017_query.dbo.query q with (nolock) on q.db=a.db and q.tb=a.tb and pa.c_id=q.pk
where @ca=0 or exists(select top 1 1 from caigou_2017_query.dbo.query q1 with (nolock) where c_id=q.pk and db=15 and tb=907150277 and exists(select top 1 1 from caigou_2017_query.dbo.query_path with (nolock) where qid=q1.id and col='ca' and val=@ca))
order by a.clicks desc
--------
co_id c_name
----------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
202629 北京悠客网信息技术有限公司
204625 北京东鼎恒昆科技发展有限公司
55828 上海昕宝电子科技有限公司
58038 深圳市兴鼎业科技有限公司
216404 深圳市加瑞尔科技有限公司
206860 广州市汇百美信息科技有限公司
211794 立图电子科技有限公司
202865 广州兴烨数码科技有限公司
210568 深圳市尚品鼎尊科技有限公司
221411 北京光大远见技术有限公司
表 'PageViewBase'。扫描计数 16,逻辑读取 44033 次,物理读取 0 次,预读 10 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'query'。扫描计数 0,逻辑读取 75815637 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'query_path'。扫描计数 4018,逻辑读取 124196 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'pub_company'。扫描计数 144743,逻辑读取 320377 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 106860 毫秒,占用时间 = 8981 毫秒。
co_id c_name
----------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
202629 北京悠客网信息技术有限公司
204625 北京东鼎恒昆科技发展有限公司
55828 上海昕宝电子科技有限公司
58038 深圳市兴鼎业科技有限公司
216404 深圳市加瑞尔科技有限公司
206860 广州市汇百美信息科技有限公司
211794 立图电子科技有限公司
202865 广州兴烨数码科技有限公司
210568 深圳市尚品鼎尊科技有限公司
221411 北京光大远见技术有限公司
(10 行受影响)
表 'PageViewBase'。扫描计数 16,逻辑读取 44033 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'query_path'。扫描计数 0,逻辑读取 209277 次,物理读取 1 次,预读 16 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'query'。扫描计数 3753,逻辑读取 23096 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'pub_company'。扫描计数 135065,逻辑读取 298967 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 4713 毫秒,占用时间 = 429 毫秒。
--方法一: 加 with recompile
CREATE PROCEDURE [dbo].[GetHotCompany]
@dt date,@ca INT
WITH RECOMPILE
AS
BEGIN
SET NOCOUNT ON;
select top 10 co_id,c_name from (
select db,tb,pk,count(0) as clicks from caigou_tj.dbo.PageViewBase a with (nolock)
where db=15 and tb=1419152101 and datediff(d,dt,@dt) between 0 and 1
group by db,tb,pk
) a
inner join caigou_2017.dbo.pub_company pa with (nolock) on pa.co_id=a.pk
inner join caigou_2017_query.dbo.query q with (nolock) on q.db=a.db and q.tb=a.tb and pa.c_id=q.pk
where @ca=0 or exists(select top 1 1 from caigou_2017_query.dbo.query q1 with (nolock) where c_id=q.pk and db=15 and tb=907150277 and exists(select top 1 1 from caigou_2017_query.dbo.query_path with (nolock) where qid=q1.id and col='ca' and val=@ca))
order by a.clicks desc
END
GO
--方法二:在语句最后面加 option(recompile)
CREATE PROCEDURE [dbo].[GetHotCompany]
@dt date,@ca INT
AS
BEGIN
SET NOCOUNT ON;
select top 10 co_id,c_name from (
select db,tb,pk,count(0) as clicks from caigou_tj.dbo.PageViewBase a with (nolock)
where db=15 and tb=1419152101 and datediff(d,dt,@dt) between 0 and 1
group by db,tb,pk
) a
inner join caigou_2017.dbo.pub_company pa with (nolock) on pa.co_id=a.pk
inner join caigou_2017_query.dbo.query q with (nolock) on q.db=a.db and q.tb=a.tb and pa.c_id=q.pk
where @ca=0 or exists(select top 1 1 from caigou_2017_query.dbo.query q1 with (nolock) where c_id=q.pk and db=15 and tb=907150277 and exists(select top 1 1 from caigou_2017_query.dbo.query_path with (nolock) where qid=q1.id and col='ca' and val=@ca))
order by a.clicks DESC option(recompile)
END