T-SQL Optimization Tips (2): 限制数据规模
SQL Server执行的T-SQL返回的数据越少,用以完成该T-SQL占用的资源就越少。所以,T-SQL语句应该只返回需要的数据,这有利于提高SQL Server的整体性能:
- 充分利用索引从而规避全表扫描;
- 降低读取数据的I/O操作;
- 为其它可能的SQL Server操作节约缓存;
- 避免不必要的网络传输;
- 减少无用数据为客户端带来的内存占用。
等等。
1)限制结果集的行数
在实际开发中,需要返回一个表中所有行的数据的操作是极少的,所以应该限制返回结果集的行数,WHERE子句、TOP运算符以及SET ROWCOUNT选项是可能的选择。值得注意的是,使用TOP运算符和SET ROWCOUNT选项时,在结果集的行数达到一定数量(由这两种选择的参数决定)后T-SQL就会中止,即后两种选择要比使用WHERE子句更具效率,但是显然WHERE子句应用的情境要更多。如果同时在T-SQL中使用了TOP运算符和SET ROWCOUNT选项,虽然画蛇添足,但也不致影响效率,优先级方面SET ROWCOUNT选项要比TOP运算符高。
2)限制结果集的列数
对于一个二维表结构来说,除了限制行数,就是限制列数了。除非所有列都是需要的,否则应当避免使用SELECT *语句选择数据。
另外,应该避免对视图进行SELECT操作,因为很多视图返回的数据可能要比我们需要的数据要多得多,更具效率的做法是绕过视图而直接从表中SELECT数据。
DOS & DONTS——
3、避免使用SELECT *;
[注意:为了引起注意,所有本系列总结的DOS & DONTS都是具有一定前提的,一般的前提是“除非必要”和“除非必要才不”。]
Life is like a boat, and I'm at sea.