sql的where语句中查询某个时间之后的话速度异常慢,不加where反而很快。

keetian 2013-01-07 06:55:30
查询异常的语句:很慢很慢,几秒钟才几十条数据出来
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之后的时间就变得很异常。

...全文
484 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-01-07
  • 打赏
  • 举报
回复
你可以删除索引执行的时候看看执行计划,即ctrl+M然后执行。然后创建后再看看执行计划,对比一下。应该是丢失索引
keetian 2013-01-07
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
查看执行计划,把占用资源位置建上索引 --没建索引时,建上以下索引再测测 SQL code?12Create index IX_tb_saletest_ALL on tb_saletest(senddate,LAC,CELLID)Create index IX_tb_LAC_TEMP_ALL on tb_LAC_TEMP(LAC,CELLID)
这个有效,为什么和时间有关系呢?查询范围变小反而有问题
發糞塗牆 2013-01-07
  • 打赏
  • 举报
回复
看执行计划,才知道发生什么问题,但是初步断定两种可能性:1、丢失索引,2、数据分布不平均导致某些数据会引起表扫描才能查询出来。 另外2楼的方法可能性能更差,可能而已,要看执行计划。
  • 打赏
  • 举报
回复
where convert(varchar(20),A.senddate,23)='2012-12-11'
中国风 2013-01-07
  • 打赏
  • 举报
回复
查看执行计划,把占用资源位置建上索引 --没建索引时,建上以下索引再测测
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)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧