SQL Server存储过程编写和优化

最新更新时间:2012-03-31来源: 互联网关键字:SQL  Server  存储过程  编写  优化 手机看文章 扫描二维码
随时随地手机看文章

一、适合读者对象:数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。

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

  三、内容:

  1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。

  2、开发人员在提交

  前,必须已经使用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 等。

关键字:SQL  Server  存储过程  编写  优化 编辑:神话 引用地址:SQL Server存储过程编写和优化

上一篇:利用云存储的数据中心存储管理方案
下一篇:MAX16070/MAX16071闪存可配置系统监测器

推荐阅读最新更新时间:2023-10-12 20:38

三相SPWM简介及其优化方法
   三相SPWM的产生一般可以通过三相相位上互差120°的正弦波与三角波比较来实现。三相正弦表可以由三个独立的相位互差120°的正弦表组成,这在设计思路上是简单的,但实际中却有很大的浪费。 目前有人采用了分时复用的方法来减少三相正弦表所占用的逻辑门 。从正弦波的波形   可以看出,正弦波具有很好的对称性,还能对正弦表再进行优化。   因此,本文提出了利用分时复用以及正弦波的对称性,对三相正弦表进一步优化,以进一步减少正弦表所占用的逻辑门,提高FPGA的利用率。   1 数据的合成   数据合成由分时复用电路和运算电路两部分组成。通过分时复用,使得所需的正弦表减少到原来的1/3,即产生三相正弦波只需一个正弦表。运
[电源管理]
三相SPWM简介及其<font color='red'>优化</font>方法
功率因数校正标准优化解决方案
人们都倾向于按照基本的60Hz或50Hz频率考虑电力线上的能量——这也是电站的涡轮和发电机产生电压的方式。当然,如果有无功负载,电流就会滞后于电压。这就是“功率因数”,对吗?但难道它仍然是关于50Hz或60Hz时的“实际”和无功元件吗?也对也错。遗憾的是,这种概念化过程有些太过简单了。   在电力配送系统中,对 功率因数校正 (PFC)的理解通常是在电力配送系统中的某些点增加(一般来说)电容性电抗以抵消电感性负载效应。我们可以说是“无功”负载,但电源工程师在解决功率因数问题时通常最关心的是电机负载。校正时可以采取电容阵列或“同步调相器”(一种无负载同步电机)的形式。   更广泛地说,在使用AC-DC电源转换的任何电力线
[电源管理]
功率因数校正标准<font color='red'>优化</font>解决方案
优化太阳能系统新招:用微型逆变器连接太阳能板
  优化太阳能系统效率和可靠性的一种较新方法是使用连接至每个单独太阳能板的微型逆变器。为每个太阳能板都安装其自己的微型逆变器,让系统可以适应其变化的负载和空气环境,从而为单个太阳能板和整个系统提供最佳的转换效率。微型逆变器构架还实现了更简单的布线,从而实现更低的安装成本。通过提高用户太阳能系统的效率可缩短系统的初始技术投入回报时间。      图1:传统的电源转换器构架包括一个太阳能逆变器,其从一个PV阵列接收低DC输出电压,然后产生AC线压。   电源逆变器是太阳能发电系统中关键的电子组件。在一些商业应用中,这些组件连接光伏(PV)板、存储电荷的电池以及局域配电系统或公共电网。图1显示的是一款典型的太阳能逆变器,它从PV阵列DC
[电源管理]
<font color='red'>优化</font>太阳能系统新招:用微型逆变器连接太阳能板
用单片机编写几种跑马灯
任务: 1、在电路板上实现跑马灯,一次1匹 2、在电路板上实现跑马灯,一次2匹 3、在电路板上实现4个二极管的同时闪烁 源程序1: /***********************************信息**************************************** **作者:刘海涛 **版本:初始版V1.0 **描叙:用电路板实现跑马灯。 **日期:2010年7月25日 *******************************************************************************/ /******************
[单片机]
STM32单片机中,FreeRTOS RAM使用情况及优化方法
一.写在前面的话: 嵌入式设计中使用 RTOS 必然会带来额外的 RAM 消耗,然而许多初次接触 RTOS 的工程师并不清楚 如何评估 RAM 的消耗量。这篇文档以 FreeRTOS 为例,介绍评估 RAM 使用情况的一般方法,并给出 在 FreeRTOS 下优化 RAM 使用的方法,也由衷的期望读者在使用其他 RTOS 时,可以通过相似的思 路来解决问题。 二.FREERTOS RAM 使用情况 FreeRTOS 的组件包括调度器,内存管理单元及任务间通讯方法,当然还提供可选的软件定时器(事 实上,多数 RTOS 提供的组件都是这几项)。因此对 RAM 的使用情况的评估也与这几项直接相关。内 存管理单元提供内存管理办法,直接消耗
[单片机]
STM32单片机中,FreeRTOS RAM使用情况及<font color='red'>优化</font>方法
Android 5.0的大屏实验:优化不够充分
   2014年11月18日 08:57      爱范儿        我有话说( 41 人参与)   收藏本文         Android 5.0棒棒糖已经向各Nexus设备推送更新了,作为最新一代的Android系统,棒棒糖的关注点大多在手机上,它在大屏幕上表现如何?就有人拿Nexus 10做了实验。   Nexus 10是Google和三星在2012年联合推出的平板电脑,搭载10.1英寸2560×1600分辨率屏幕,A15架构处理器、Android 4.2操作系统。   相比Nexus 7,Nexus 10更加耐用——arstechnica做实验的这台机器仍然可以正常使用。   两年前,Android在大
[手机便携]
编写单片机应用程序的步骤
1、搞清楚功能、编制方案。 接到一个单片机项目设计文件之后,并不是马上动手编写程序,而是仔细研究用户提出的技术要求或者技术说明,根据这些技术要求和技术说明,也就是客户要求,把程序应该具备的主要功能写清楚,写仔细,这是最关键的工作。如不清楚,应向客户和使用者问清楚,否则在设计完成以后会发现有些功能由于事先没有考虑清楚再重新设计将会很麻烦,可能有些需要重新增加的功能很容易补充,而有些可能由于没有事先考虑周全而无法实现。 2、编制总流程图和各功能模块的流程图 根据要完成的程序功能写出总流程图,根据总流程图把整个程序划分成几个主要的功能模块,每个功能模块都要写出基本流程图,这主要是为以后的程序编写起到一个指导作用。当然,在实际的程
[单片机]
采用可定制微控制器来优化算法的设计
  Atmel公司的CAP可定制微控制器为这种挑战提出了一种可行的解决方案。CAP是一块基于微控制器的系统级芯片,能提供基本的处理能力,以及高密度的金属可编程(MP)数字逻辑块,这些块可以进行个性化,提供类似于DSP或其它专用的功能执行硬件。CAP同时具有合理的开发周期与具有吸引力的单位批量价格的成本好处。专用CAP的开发流程包括基于开发板的仿真步骤,这个开发板使用高密度的FPGA来仿真算法执行功能,这种功能随后硬化在金属可编程模块中。   从全球定位系统到音视频媒体流处理,这些应用都需要实时地执行复杂的算法,很多这些算法都需要遵从定期更新的行业标准。工程师开发这些应用面临的挑战是在单位成本、外形尺寸和功耗,以及严格的成本和
[单片机]
采用可定制微控制器来<font color='red'>优化</font>算法的设计
小广播
最新模拟电子文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved