日期:2014-05-17  浏览次数:20431 次

语句怎么优化啊?运行太慢了,还会出现死机
select a.buildname,b.ddate as [采集时间],b.MeterJSWD as [供温],b.MeterHSWD as [回温]    
  ,b.MeterGY as [供压],b.MeterHY as [回压] ,b.MeterNJRL as [累计热量],b.MeterNLLL as [累计流量]    
  ,b.Meterssll as [瞬时流量],b.Meterslrl as [瞬时热量]      
  ,c.DoorNo,b.BuildNo,c.doorname,a.Totalhuanlu,b.bs
  from TBuild as a    
  left join TMETERHistory2013 as b on a.BuildNo = b.BUILDNO     
  inner join TDoor as c on b.BuildNo = a.BUILDNO and c.DoorNo = b.DOORNO        
  where  Meterstats = 0 and  datediff(second,CONVERT(char(10),'2013-12-2 15:20:00',120) ,b.DDate) between  CAST(((1 - 1 ) * 5 * 60  ) as nvarchar(100))   and    CAST((1 * 5 * 60  ) as nvarchar(100)) and a.buildno=1211   


  

------解决方案--------------------
试试建个索引:

create index idx_TMETERHistory2013_cc on TMETERHistory2013(BUILDNO,DOORNO)

------解决方案--------------------
右键绿色那个字,然后选查看丢失索引信息,把那个索引建了试试
------解决方案--------------------
建索引没用,典型的表扫描
改指令是正道
------解决方案--------------------
引用:
试试建个索引:

create index idx_TMETERHistory2013_cc on TMETERHistory2013(BUILDNO,DOORNO)


但是没有用上这个索引。

那就先强制使用索引试试:

left join TMETERHistory2013 with(index (索引名称))as b
------解决方案--------------------
把上面提示的缺失索引先建上去.....
------解决方案--------------------
或者试试这个:

update statistics  TMETERHistory2013 


------解决方案--------------------
引用:
Quote: 引用:

建索引没用,典型的表扫描
改指令是正道

怎么改指令?


改写语句呗,不过这个是最后的办法,而且也不一定有效
------解决方案--------------------
因为你这些列都用到了,但是上面没索引,可能会导致书签查找,增加额外的IO,先加上去吧,除非改语句
------解决方案--------------------
引用:<