`
starbhhc
  • 浏览: 658344 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

[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、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存储过程编写和优化措施”这一主题的深入解析,旨在帮助数据库管理员及开发人员掌握有效的编写与优化策略。 ### 存储过程编写原则 #### 1. 明确依赖关系 - **TableView**:使用前需明确其依赖...

    SqlServer存储过程及调试指南

    SqlServer存储过程及调试指南的知识点如下: 1. 存储过程概念:存储过程是一...通过掌握这些知识点,初学者以及希望深入研究的开发人员将能够更有效地编写和调试SqlServer存储过程,提升数据库应用程序的质量和性能。

    SQLServer存储过程调用WebService

    ### SQL Server 存储过程中调用 WebService 的实现方法 #### 一、引言 在企业级应用开发中,Web Service 作为一种标准的接口技术,被广泛用于不同平台...此外,在编写存储过程时,还需要注意安全性和性能优化等问题。

    sqlserver存储过程的编写

    有关sqlserver存储过程的编写及例子,并且对其他如.net中的存储过程有一点例子。

    Sql Server 存储过程的导出导入.doc

    本文主要介绍如何在SQL Server中导出和导入存储过程。 首先,导出存储过程的步骤如下: 1. 打开SQL Server Management Studio(简称SSMS),这是一个用于管理SQL Server数据库的强大工具。 2. 在对象资源管理器中...

    如何编写SQL Server存储过程的详尽学习资料

    至于"SQLServer2000存储过程与XML编程第2版code"这个文件,它可能包含了一些针对SQL Server 2000的存储过程示例代码和XML相关的实践。XML在SQL Server中用于数据交换和存储,学习如何在存储过程中使用XML数据类型和...

    vs中断点测试sqlserver的存储过程

    通过对上述步骤的详细解析,我们不仅了解了如何在VS中进行SQL Server存储过程的中断点测试,还掌握了整个调试过程中涉及的关键技术和操作流程。这一技能对于任何从事数据库应用开发的专业人士来说都是不可或缺的,它...

    SQL Server存储过程解密工具

    SQL Server存储过程是数据库管理系统中一个非常重要的组成部分,它允许程序员和DBA编写一组复杂的SQL语句,封装成一个可重用的模块。在某些情况下,为了保护代码不被未经授权的用户查看或修改,开发人员可能会选择对...

    sql server2008轻松编写t-sql存储过程

    ### SQL Server 2008 轻松编写 T-SQL 存储过程 #### 一、引言 SQL Server 2008 是一款功能...通过使用SQL Server Management Studio,开发者可以更加轻松地进行存储过程的编写、调试和管理,从而更好地满足项目需求。

    sqlserver存储过程生成器

    使用SQL Server存储过程生成器可以极大地简化存储过程的创建过程,减少手动编写和调试的工作量,特别是在大型项目中,这样的工具能显著提升开发效率和代码质量。然而,值得注意的是,尽管工具可以自动化许多任务,...

    编写安全的SQL Server扩展存储过程

    编写安全的SQL Server扩展存储过程是至关重要的,因为它们在SQL Server的地址空间内运行,直接影响到数据库系统的稳定性和安全性。 扩展存储过程的关键在于理解它们如何与SQL Server的执行环境交互。由于DLL在SQL ...

    SQL Server 存储过程与实例

    以下是关于SQL Server存储过程的详细说明: 1. **存储过程的概念** 存储过程Procedure是一系列SQL语句的集合,它们在数据库中以编译好的形式存储,当需要执行时,只需要调用存储过程的名称并传入相应的参数。存储...

    SQLSERVER存储过程例子

    以下是针对"SQLSERVER存储过程例子"的详细解释。 1. **存储过程的概念**: 存储过程是一组为了完成特定功能的SQL语句,这些语句被组合在一起并保存在数据库中,用户可以通过调用存储过程的名字来执行这些语句。...

    SQL Server存储过程编程经验技巧

    本文将详细介绍SQL Server存储过程编程经验技巧,涵盖了SQL Server存储过程的基本概念、编写技巧和注意事项等内容。同时,本文也将对SQL Server存储过程的应用场景和优化方法进行介绍,以便读者更好地理解和应用SQL ...

    SQL_Server存储过程调试指南

    资源名称:SQL_Server存储过程调试指南内容简介: 存储过程( Stored Procedure)是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来...

    SQL SERVER 存储过程学习笔记

    这篇学习笔记将深入探讨SQL Server存储过程的基本概念、创建、执行以及其在数据库开发中的应用。 一、存储过程的基本概念 存储过程是数据库中的一个对象,由一系列的SQL语句、控制流语句(如IF-ELSE,WHILE)和变量...

    SQLserver2008存储过程编写(有参和无参)

    在SQL Server 2008中,存储过程是一种预编译的SQL代码集合,它可以包含一个或多个SQL语句,用于执行特定的任务...在SQL Server 2008中,熟练掌握存储过程的编写和使用对于优化数据库操作和提升数据库管理效率至关重要。

    SQLServer存储过程在系统开发中的应用

    SQL Server 支持多种类型的存储过程,每种类型都有其独特的应用场景和特点: 1. **系统存储过程**:由系统提供的存储过程,用于执行数据库管理任务。这些存储过程定义在系统数据库 `MASTER` 中,前缀通常为 `SP_`。...

    SQL server存储过程语法及实例

    SQL Server存储过程是SQL Server中为了完成特定功能的SQL语句集,可以看作是一个或多个SQL语句的封装,用于实现特定的业务逻辑或功能,可以包含逻辑控制、数据处理等代码。存储过程可以简化复杂的操作、增强性能、...

Global site tag (gtag.js) - Google Analytics