SQL SERVER 数据库优化总结

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

--------------------------------------未完待续---------------------------------------

发布了32 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41278749/article/details/103532237