存储进程编写经历和优化办法51CTO博客 - 威尼斯人

存储进程编写经历和优化办法51CTO博客

2019年03月10日10时28分36秒 | 作者: 鸿哲 | 标签: 进程,优化,运用 | 浏览: 944

一、合适读者目标:数据库开发程序员,数据库的数据量许多,涉及到对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(这儿应该是set showplan_text 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 (这儿应该是set showplan_text on)等。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章