SQL性能学习汇总
                        
                            时间:2021-07-01 10:21:17
                            帮助过:2人阅读
							                        
                     
                    
                    
                     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.使用批处理更新语句,一次更新多条记录比分多次更新而每次更新一条语句快。
 
SQL性能学习汇总
标签: