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)传送门:http://bbs.csdn.net/topics/390507709
不加desc,看执行计划,执行次数就相当于整个表的数据量了如果语句: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条件,也是几秒就出结果了。为什么呢。 我表达的可能不太好。
2. ORDERBY后面的字段建立了索引,如果经常是desc排序的,那么建立索引可以直接建立倒叙排序的索引
3. 组合索引可以考虑建立
4。打开查询计划和执行开关 ,分析开销大的,并通过走索引等方式降低开销从而提升查询效率