查询效率问题。 求解
select top 100 * from A
d JOIN V1 c on d.F1=c.F1
JOIN B b
on d.F1=b.1
where FState=1 and FIsSafe='是'
order by d.FTime
A表单表有700W条数据。
主要问题是order by d.Time,要1分多钟才出来,而且看执行计划,貌似整个表遍历了一次。。。
如果我换成order by d.Time desc 3秒就出结果了。
FState与FIsSafe都有加索引(asc),也有加一个联合索引(FState,FIsSafe)
如果语句是这样
select top 100 * from A
d JOIN V1 c on d.F1=c.F1
JOIN B b
on d.F1=b.1
where FState=1
order by d.FTime
不要FIsSafe条件,也是几秒就出结果了。
为什么呢。 我表达的可能不太好。
------解决方案--------------------主要问题是order by d.Time,要1分多钟才出来,而且看执行计划,貌似整个表遍历了一次。。。
如果我换成order by d.Time desc 3秒就出结果了。
其他条件没改么?执行计划有什么改变?ASC是默认排序。 A表的结构是怎么样的?
------解决方案--------------------SET SHOW_PLANTEXT ON
GO
你的两段语句
给个结果
------解决方案--------------------给个执行计划看看吧
------解决方案--------------------700w数据查询几秒出来应该属于正常的。看你的表结构,或者需要建索引
------解决方案--------------------在A表FTime字段上建asc索引试试..
另建议不要用"select * ..",把需要返回的字段列出来.