首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一sql语句性能有关问题-

2012-03-02 
一sql语句性能问题--在线等当执行这条语句的时候,执行时间大概在3秒。SELECT ObjCampaign.ObjCampaignId,SU

一sql语句性能问题--在线等
当执行这条语句的时候,执行时间大概在3秒。
SELECT ObjCampaign.ObjCampaignId,SUBSTRING(MediaSpotMatch.YEARMONTH,1,4) as [Year],ObjCampaign.CampaignTargetId,
SUM(CASE WHEN MediaSpotRating.Universe = 0 THEN 0 ELSE MediaSpotRating.Impression/CONVERT(DECIMAL(38,3),MediaSpotRating.Universe) END) * 110 AS [Rating_11_0] 
FROM MediaSpotMatch  
Inner join MediaSpotRating On MediaSpotMatch.MediaSpotMatchID = MediaSpotRating.MediaSpotMatchId 
INNER JOIN dbo.ObjCampaign ON ObjCampaign.ObjCampaignId = MediaSpotMatch.ObjCampaignId 
INNER JOIN #TMP_Campaign ON MediaSpotMatch.ObjCampaignId = #TMP_Campaign.ObjCampaignId 
Where MediaSpotMatch.YearMonth >= '200710' AND MediaSpotMatch.YearMonth <= '200712' AND MediaSpotRating.YearMonth >= '200710' 
AND MediaSpotRating.YearMonth <= '200712' AND MediaSpotRating.TargetId = 11 
AND MediaSpotMatch.ActualSpotStartDate >= '2007-10-01' AND MediaSpotMatch.ActualSpotStartDate <= '2007-12-31' 
Group By ObjCampaign.ObjCampaignId,SUBSTRING(MediaSpotMatch.YEARMONTH,1,4),ObjCampaign.CampaignTargetId


但是当我把sql 语句中的日期都换成11月份,也就是下面的语句的时候,执行时间大概在2分钟左右。
SELECT ObjCampaign.ObjCampaignId,SUBSTRING(MediaSpotMatch.YEARMONTH,1,4) as [Year],ObjCampaign.CampaignTargetId,
SUM(CASE WHEN MediaSpotRating.Universe = 0 THEN 0 ELSE MediaSpotRating.Impression/CONVERT(DECIMAL(38,3),MediaSpotRating.Universe) END) * 110 AS [Rating_11_0] 
FROM MediaSpotMatch  
Inner join MediaSpotRating On MediaSpotMatch.MediaSpotMatchID = MediaSpotRating.MediaSpotMatchId 
INNER JOIN dbo.ObjCampaign ON ObjCampaign.ObjCampaignId = MediaSpotMatch.ObjCampaignId 
INNER JOIN #TMP_Campaign ON MediaSpotMatch.ObjCampaignId = #TMP_Campaign.ObjCampaignId 
Where MediaSpotMatch.YearMonth >= '200711' AND MediaSpotMatch.YearMonth <= '200712' AND MediaSpotRating.YearMonth >= '200711' 
AND MediaSpotRating.YearMonth <= '200712' AND MediaSpotRating.TargetId = 11 
AND MediaSpotMatch.ActualSpotStartDate >= '2007-11-01' AND MediaSpotMatch.ActualSpotStartDate <= '2007-12-31' 
Group By ObjCampaign.ObjCampaignId,SUBSTRING(MediaSpotMatch.YEARMONTH,1,4),ObjCampaign.CampaignTargetId

请问这样的结果可能是什么原因造成的?

[解决办法]
这样其实是很正常的啊。

使用不同的限制条件检索数据,用的时间一般在绝对意义上是肯定又区别的。

他们得到的结果集不同,显示出来就是一个从磁盘到内存的读取过程(很消耗资源的IO操作),应该说这部分差异是造成执行时间的主要原因。
[解决办法]
查看一下系统资料占用率是多少?--执行语句1,语句2时
--------
用事件探查器追一下原因,估计有其它事务锁住了表

[解决办法]
原因很可能是缓存,你多执行几次后面的语句,如果时间有减少就说明是缓存的原因


[解决办法]
检查各个连接条件的字段上有没有索引

[解决办法]
多次执行都是2分钟?

看一下执行计划,对比两个语句,看成本消耗的差别在什么地方
[解决办法]
两个语句分别返回多少行数据?

热点排行