1 索引, 创建合适的索引最有效的优化手段。很多资料讲这个。
2 尽量返回少量结果集。
譬如,有一个表存放着其他应用填充的数据,你需要从这个表中获取所有的数据并进行处理。
现实情况是,某个时刻这个表可能积累了500,000级别以上的数据。如果程序中直接使用 select * from tb_TempData返回所有结果集合,就会导致严重后果。想想,返回这些数据都需要相当多的时间或超时,以及磁盘IO或cache等恶劣影响。
合适的做法是返回top 1000或者依据ID(如果有)字段返回一定范围的记录。处理完这批后,再处理下1000条。
3 尽量在表join之前将记录集限制为最小
譬如sql: select a.field1, a.field2, b.name from table1 as a inner join table2 as b on a.ID = b.FID where a.update_time>'2006-3-3'
优化的前提:大多数情况下,符合update_time条件的记录集很小。
table1和table2都是大表,尽量将此sql改为:
select a.field1, a.field2, b.name from (select field1, field2) from table1 where update_time>'2006-3-3') as a
inner join table2 as b on a.ID = b.FID
当sql语句比较复杂,where条件较多时,sql server优化不能保证正确选择返回最小集合的条件。所以,我们需在设计sql语句时指明这点。