存储过程编写经验和优化措施(来源自CSDN文档中心)

储过经验化措施
来源自CSDN文档中心 http://dev.csdn.net/article/68134.shtm

    一、适合象:数据库开发程序,数据的数据量很多,及到SP(存储过程)的化的开发数据趣的人。  

  二、介:在数据开发过程中,常会遇到复杂业务逻辑数据的操作,候就会用SP来封装数据操作。如果目的SP多,写又没有一定的范,将会影响以后的系统维护和大SP逻辑以理解,另外如果数据的数据量大或者SP的性能要求很,就会遇到化的问题,否速度有可能很慢,经过亲经验,一个经过优SP要比一个性能差的SP的效率甚至高几百倍。  

  三、内容:  

  1开发如果用到其他TableView必在当前中建立View实现操作,最好不要直接使用“databse.dbo.table_name”,因sp_depends不能示出SP所使用的跨tableview,不方便校。  

  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. 注意insertupdate操作的数据量,防止与其他用冲突。如果数据量超200个数据面(400k),那将会页级锁会升成表级锁   

  b)索引的使用范:

   i. 索引的建要与合考,建大的OLTP表不要超6个索引。

   ii. 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要可以通index index_name制指定索引

   iii. 避免大表查询时进table scan,必要新建索引。

   iv. 在使用索引字段作条件,如果索引是合索引,那使用到索引中的第一个字段作条件才能保使用索引,否则该索引将不会被使用。

   v. 要注意索引的维护,周期性重建索引,重新编译储过程。  

  c)tempdb的使用范:

   i. 尽量避免使用distinctorder bygroup byhavingjoincumpute,因为这句会加重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 等。

 
来源自CSDN文档中心 http://dev.csdn.net/article/68134.shtm

你可能感兴趣的:(存储过程)