1. 性能优化
开销比较大:游标
使用不兼容的数据类型:
无法通过索引,而是全盘扫描:①WHERE字段进行函数式或者表达式操作(尽量将操作移动到等号右边,即不对列进行操作)、
②避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN
③尽量避免在索引过的字符数据中,使用非打头字母搜索
表之间的关联条件有多个时,需要将所有条件都关联起来,否则可能搜索结果不精确或搜索效率降低
消除对大型表行数据的顺序存取
尽管在所有的检查列上都有索引,但某些形式的WHERE子句强迫优化器使用顺序存取,
如SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008
把表的一个子集进行排序并创建视图,有时能加速查询,特别是需要联表的时候。
能用between就不用IN
能用UNION ALL就不要用UNION 。UNION ALL不执行SELECT DISTINCT函数,这样就会减少很多不必要的资源
尽量不要用SELECT INTO语句。SELECT INOT 语句会导致表锁定,阻止其他用户访问该表
虽然UPDATE、DELETE语句的写法基本固定,但是还是对UPDATE语句给点建议:
a) 尽量不要修改主键字段。
b) 当修改VARCHAR型字段时,尽量使用相同长度内容的值代替。
c) 尽量最小化对于含有UPDATE触发器的表的UPDATE操作。
d) 避免UPDATE将要复制到其他数据库的列。
e) 避免UPDATE建有很多索引的列。
f) 避免UPDATE在WHERE子句条件中的列。
--分析案例
SELECT DISTINCT A.PeriodID,PeriodName FROM UserMgr_TeachInfo_Period AS A INNER JOIN
V_UserMgr_TeachInfo_SubjectGlobalPeriod AS B ON A.PeriodID=B.PeriodID INNER JOIN
UserMgr_UserInfo_Teacher AS C ON C.SubjectIDs LIKE '%'+B.SubjectID+'%'
WHERE A.SchoolID=@SchoolID AND C.UserID=@UserID
--------------------------------------未完待续---------------------------------------