1 1.在一条语句中不要重复使用相同的函数 2 2.尽可能在存储过程中使用临时变量和临时表 3 如 IF (Object_ID('tempdb..#T') IS NOT NULL) DROP TABLE #T 4 SELECT … INTO #T FROM… 5 DROP TABLE #T ; 6 3.当用SELECT INTO时,它会锁住系统表(SYSOBJECTS,SYSINDEXES等等), 7 阻碍其他连接的存取。所以在创建临时表时应该用显示申明语句, 8 即不在事务内使用SELECT INTO语句。 9 select into #T ....... 10 Begin tran 11 update #T ....... 12 end tran 13 4.存储过程中涉及更改数据时一定要使用try catch 事务 回滚等 14 5.SELECT子句中避免使用'*' 尽可能的写出需要查询的字段名 15 6.条件中尽量少用否定类型的运算符,条件中尽量少用 16 '<>', '!=''NOT IN', 'NOT EXISTS','NOT LIKE'等否定类型的运算符, 17 因为它们不走索引全是表扫描 效率高低比较EXISTS > IN > NOT EXISTS > NOT IN, 18 所以可用EXISTS代替IN的使用, NOT EXISTS或(OUTER JOIN)代替NOT IN的使用。 19 7.在WHERE条件中IN后的值排序为先繁后少,减少判断次数 20 8.避免在索引列上使用IS NULL 和 IS NOT NULL。NULL条件将使该索引无法作用。 21 9.尽可能不在条件中使用函数 22 10.用'>=','<='替代'>','<' 23 示例(不推荐) 24 SELECT EmpNO 25 FROM EMP 26 WHERE DeptNO > 3; 27 示例(推荐) 28 SELECT EmpNO 29 FROM EMP 30 WHERE DeptNO >= 4; 31 两者区别在于,前者DBMS将直接跳到Dept等于4的记录而后者将首先定位 32 到DeptNO = 3的记录再向前扫描到第一个Dept大于3的记录 33 11.UNION代替OR的使用 34 12.TOP + 数值 替代 TOP + 百分比 的使用 35 13.尽量使用精准查询 36 在LIKE语句中,若能确定使用LIKE'a%'则不用LIKE'%a'或LIKE'%a%' 37 因为前者能用上索引,而后两者则不能。 38 且LIKE'%a%'查询时的耗时和字段值总长度成正比, 39 所以用VARCHAR比用CHAR类型较高效。 40 如果能精准查询则坚决不能采用模糊查询。 41 14.条件允许时UNION ALL替代UNION的使用 42 15.没有必要时不用DISTINCT和ORDER BY 43 DISTINCT和ORDER BY这些动作可以改在客户端执行。 44 它们增加了额外的开销。这同UNION和UNION ALL一样的道理 45 16.使用批处理更新语句,一次更新多条记录比分多次更新而每次更新一条语句快。