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

sql的where语句中查询某个时间之后的话速度异常慢,不加where反而很快。
查询异常的语句:很慢很慢,几秒钟才几十条数据出来
select  A.Models,B.area_level1 province, B.area_level2 city,A.senddate acctime  
from  tb_saletest  A left join  tb_LAC_TEMP B ON A.LAC=B.LAC AND A.CELLID=B.CELLID 
where A.senddate>='2012-12-11' and A.senddate<'2012-12-12'  

很快,1秒不到查询完成。
select  A.Models,B.area_level1 province, B.area_level2 city,A.senddate acctime  
from  tb_saletest  A left join  tb_LAC_TEMP B ON A.LAC=B.LAC AND A.CELLID=B.CELLID 
where A.senddate>='2012-12-10' and A.senddate<'2012-12-12'  


以上两条只是起始时间不一致。去掉where语句的话,2秒查完全部50万数据。加了超过2012.12.11之后的时间就变得很异常。


------解决方案--------------------
查看执行计划,把占用资源位置建上索引

--没建索引时,建上以下索引再测测
Create index IX_tb_saletest_ALL on tb_saletest(senddate,LAC,CELLID)
Create index IX_tb_LAC_TEMP_ALL on tb_LAC_TEMP(LAC,CELLID)

------解决方案--------------------
你可以删除索引执行的时候看看执行计划,即ctrl+M然后执行。然后创建后再看看执行计划,对比一下。应该是丢失索引