加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

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

发布时间:2018-09-19 10:46:22 所属栏目:电商 来源:站长网
导读:一、媒介:在颠末一段时刻的存储进程开拓之后,写下了一些开拓时辰的小结和履历与各人共享,但愿对各人有益,首要是针对Sybase和SQL Server数据库,但其余数据库应该有一些共性。 二、得当读者工具:数据库开拓措施员,数据库的数据量许多,涉及到对SP(存

一、媒介:在颠末一段时刻的存储进程开拓之后,写下了一些开拓时辰的小结和履历与各人共享,但愿对各人有益,首要是针对Sybase和SQL Server数据库,但其余数据库应该有一些共性。

二、得当读者工具:数据库开拓措施员,数据库的数据量许多,涉及到对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、***pute,由于这些语句会加重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 等

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读