一、适合读者对象:数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。  
二、介绍:在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。如果项目的SP较多,书写又没有一定的规范,将会影响以后的系统维护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过亲身经验,一个经过优化过的SP要比一个性能差的SP的效率甚至高几百倍。  
三、内容:  
1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。  
2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。  
3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点:   
a)SQL的使用规范:
i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。
ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。
iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。
iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。
v. 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。
vii. 尽量使用“>=”,不要使用“>”。
viii. 注意一些or子句和union子句之间的替换
ix. 注意表之间连接的数据类型,避免不同类型数据之间的连接。
x. 注意存储过程中参数和数据类型的关系。
xi. 注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。   
b)索引的使用规范:
i. 索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。
ii. 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过index index_name来强制指定索引
iii. 避免对大表查询时进行table scan,必要时考虑新建索引。
iv. 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。
v. 要注意索引的维护,周期性重建索引,重新编译存储过程。  
c)tempdb的使用规范:
i. 尽量避免使用distinct、order by、group by、having、join、cumpute,因为这些语句会加重tempdb的负担。
ii. 避免频繁创建和删除临时表,减少系统表资源的消耗。
iii. 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。
iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。
v. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。
vi. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。  
d)合理的算法使用:   
根据上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,结合实际应用,采用多种算法进行比较,以获得消耗资源最少、效率最高的方法。具体可用ASE调优命令:set statistics io on, set statistics time on , set showplan on 等。

转载于:https://blog.51cto.com/chenjie/7501

存储过程编写经验和优化措施相关推荐

  1. 存储过程编写经验和优化措施 1

    转自:http://dev.csdn.net/article/84/84506.shtm 一.前言:在经过一段时间的存储过程开发之后,写下了一些开发时候的小结和经验与大家共享,希望对大家有益,主要是针 ...

  2. 技术文档编写经验总结

    又一个项目即将结束,从编写技术文档.代码开发到联调,8个人还不到两周的时间,居然完成了,想想自己都很吃惊. 虽然是个小项目,但还是有很多东西需要沉淀下来. 正好晚上吃饱了没事干,写个博客记录一下技术文 ...

  3. 程序编写经验教训_编写您永远都不会忘记的有效绩效评估的经验教训。

    程序编写经验教训 This article is intended for two audiences: people who need to write self-evaluations, and ...

  4. 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  5. linux生产服务器有关网络状态的优化措施

    本博文为老男孩linu培训机构早期的培训教案,特分享以供大家学习参考. 全部系列分为五篇文章,本博文为第五篇:5.1高并发linux生产服务器内核参数优化案例 高并发linux生产服务器内核参数优化案 ...

  6. 为了减少接口的响应时间,有哪些优化措施?(可以从架构、代码等各个角度谈)?

    为了减少接口的响应时间,有哪些优化措施?(可以从架构.代码等各个角度谈)? 我们在开发过程中,当然是希望自己项目接口的响应时间越短越好,至少我看着自己开发出来的代码,都是毫秒级的响应,会有一种自豪感: ...

  7. 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  8. 构建高性能ASP.NET站点 第七章 如何解决内存的问题(后篇)—托管资源优化—监常用优化措施...

    构建高性能ASP.NET站点 第七章 如何解决内存的问题(后篇)-托管资源优化-监常用优化措施   前言:有段时间没有写这个系列了,希望大家见谅,本篇主要将会介绍一些常用的CLR优化措施. 本篇的议题 ...

  9. sql存储过程编写_您可以针对任何存储过程编写三个标准SQL单元测试

    sql存储过程编写 This article talks about the three standard SQL unit tests which can be written against an ...

最新文章

  1. 如何让qtableview根据行列的宽度调整大小_T-200热熔打包机,打包宽度调整步骤
  2. easyui tree:根据属性格式化树节点名称
  3. BugKuCTF WEB 输入密码查看flag
  4. kali linux 设置固定IP地址步骤
  5. 在Payara Server和GlassFish中配置密码
  6. LeetCode 311. 稀疏矩阵的乘法
  7. Delphi无法修改Clientdataset的字段的解决方法
  8. 一个关于 TensorFlow 的悲剧故事
  9. Zabbix 对接 LDAP 实现用户统一登录的方法
  10. 赋能10000家合作伙伴! | 凌云时刻
  11. Python - 装机系列24 消息工具 RabbitMQ详细了解
  12. 1.1Vue安装以及使用(node安装)
  13. php服务映射到端口,映射php错误
  14. 那些年踩过的坑-之《Android Q-高通平台UAC(USB Audio Class)调试记录》
  15. linux系统 系统推荐 deepin国产系统 最好用的国产linux系统 Windows系统的优秀替代品 deepin系统安装 系统安装 deepin
  16. Mac上键入数学符号怎样输入
  17. php 连接数据库有很多notice,PHP Notice: undefined index 完美解决方法
  18. 聊聊jvm的内存结构, 以及各种结构的作用
  19. Hive内置函数与常用函数汇总
  20. 八个步骤教你做好会议现场管理

热门文章

  1. 麻省理工和 IBM 合作创立 Watson AI 实验室,谨慎推进 AI 研究
  2. 华为MateRS巴黎大皇宫首秀 专为保时捷跑车70周年高定手机
  3. FarBox--另类有趣的网站服务【转】
  4. 系统高可用设计与实践
  5. Java并发——ReentrantLock
  6. Bash中的逻辑运算
  7. 数据库MYSQL学习系列三
  8. 全球知名物联网研究机构预测:2016物联网发展形势
  9. oracle数据库----SQL语句的实践(应用实例)
  10. 电子病历、HL7交流QQ群:14739311欢迎一起交流