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

查询效率问题。 求解

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 * ..",把需要返回的字段列出来.