select * From V_Sp_HandleList
where
1=1 and State&1=1 and starttime between '2010-01-01' and '2016-01-15 23:59:24'
and Status=-1 and State&1=1 and State&128=0 and ActorId='00504'
Order by StartTime desc
请大神看看我这条SQL 语句,查询时间需要15秒。
如果去掉Order by StartTime desc 这句查询时间1秒
如果去掉 Where 条件 加上 Order by StartTime desc 查询时间也是1秒
怎么去优化呢?谢谢咯
V_Sp_HandleList 是视图么? 你需要分析下实际的执行计划
条件又分大小来筛选就行了,大的在最后。
select * From V_Sp_HandleList
where
State&1=1 and
starttime between '2010-01-01' and '2016-01-15 23:59:24' and
Status=-1 and State&1=1 and State&128=0 and ActorId='00504'
Order by StartTime desc
显示的字段,最好指定是什么字段,不要用*符号.
开启执行计划 看具体的在分析 。 根据你的描述 问题存在的原因是 V_Sp_HandleList可能是视图 存在大量的表连接查询,
已经查询条件走的全表扫描
where 的条件加索引
少用视图就是优化
两点,
1、在条件中,有索引的在前面,能过滤最多数据的再前面
2、查出来的数据先不order by排序,先查到临时表中,再从临时表查询排序