开发存储过程的一些建议

后端开发:SQL 存储过程优化建议 在后端开发中,SQL 存储过程是一种预编译的数据库对象,它将一组 SQL 语句封装在一起,可重复调用。存储过程优化对于提高数据库性能、减少响应时间、降低资源消耗至关重要。本文的目的是为后端开发者提供全面的 SQL 存储过程优化建议,涵盖从基本概念到实际操作的各个方面。范围包括不同数据库管理系统(如 MySQL、SQL Server、Oracle 等)中存储过程优化技巧,以及在不同应用场景下的优化策略。本文将按照以下结构展开:首先介绍核心概念与联系,帮助读者理解存储过程的基本原理和架构; 阅读详情
 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) 合理的算法使用:
数据仓库EDW层数据整合集成的思考 比尔*门恩(Bill Inmon)给出了数据仓库这样一个定义,数据仓库是在企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合。今天单就数据仓库的集成整合特性进行思考,我想数据仓库的集成性大致主要体现在如下几个方面。 1、将企业相关IT系统经过面向主题的处理,本身就是一种集成 1.1、不同系统、不同业务逻辑的相关数据在各主题的统一 1.2、不同系统、相似业务逻辑的相关数据在同 阅读详情

相关推荐

【ArcGIS遇上Python】ArcGIS10.8 Python代码批量完美实现MODIS NDVI数据格式转换和投影变换

由于论文的需要,将MODIS NDVI数据进行投影变换和格式转换,具体操作可以参照:《ArcGIS10.8完美实现MODIS NDVI数据格式转换和投影变换》,但是该文章中的做法只能一次性实现一景影像的转换,没法批量,虽然ArcGIS中提供了Batch的方法但是需要挨个添加数据,确定输出路径等等,本文就实现以ArcGIS10.8 Python代码批量完美实现MODIS NDVI数据格式转换和投影变换。先来看投影后的效果: 在实现批量投影转换之前,需要两个投影文件:Sinusoidal.prj和MyAl

智慧空间实验室 3789

Sybase数据库存储过程的建立和使用

Sybase的存储过程是集中存储在SQL Server中的预先定义且已经编译好的事务。存储过程由 SQL语句和流程控制语句组成。它的功能包括:接受参数;调用另一过程;返回一个状态值给调用过程或批处理,指示调用成功或失败;返回若干个参数值给调用过程或批处理,为调用者提供动态结果;在远程SQL Server中运行等。文中还举例说明了建立和使用存储过程的语法规则。

YOLOv8改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合

一、本文介绍 本文记录的是基于U-Net V2的YOLOv8目标检测改进方法研究。本文利用U-Net V2替换YOLOv8的骨干网络,UNet V2通过其独特的语义和细节融合模块(SDI),能够为骨干网络提供更丰富的特征表示。并且其中的注意力模块可以使网络聚焦于图像中与任务相关的区域,增强对关键区域特征的提取,进而提高模型精度。本文配置了原论文中pvt_v2_b0、pvt_v2_b1、pvt_v2_b2、pvt_v2_b3、pvt_v2_b4和pvt_v2_b5六种模型,以满足不同的需求。 文章目录一、本文

Limiiiing的博客 1682

MySQL开发技巧——存储过程

目录一、任务描述二、相关知识存储过程的定义存储过程创建和查询创建带有参数的存储过程存储过程的参数有三种:存储过程的查询和删除三、编程要求四、代码本关任务:为表创建一个存储过程,使该存储过程能通过用户的信用额度来区分用户的等级。为了完成本关任务,你需要掌握: 1.存储过程的定义; 2.存储过程创建和查询; 3.存储过程的查询和删除。存储过程()是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的 语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给

weixin_51970555的博客 7230

存储过程的基本开发步骤

存储过程基本开发步骤,基本语法使用

qq_43463977的博客 398

数据库中存储过程,看这一篇就够了!!

介绍存储过程是事先经过编译并存储在数据库中的一段 SOL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的存储过程思想上很简单,就是数据库 SOL 语言层面的代码封装与重用。有什么特点呢?封装,复用可以接收参数,也可以返回数据,减少网络交互,效率提升。注意:在命令行中,执行创建存储过程的SQL时,需要通过关键字 delimiter 指定SQL语句的结束符。

Z_CH8648的博客 1万+

开发和调试存储过程

通过以上示例,你可以看到如何在MySQL、PostgreSQL和Oracle中开发和调试存储过程。首先以MySQL为例说明一个详细的指南,帮助你开发并调试存储过程,但大多数概念也适用于其他数据库管理系统如SQL Server、PostgreSQL和Oracle。开发和调试存储过程是一个迭代的过程,需要不断测试和验证。通过使用输出语句、调试工具、错误处理和日志记录等方法,可以有效地开发和调试存储过程。例如,MySQL的MySQL Workbench有一个调试器,可以逐步执行存储过程,并检查变量值和执行路径。

weixin_41247583的博客 1691

数据库开发(存储过程)

1、创建存储过程。 (1)创建无参数的存储过程。 --创建无参数的存储过程 create proc up_stu as select * from student where sex=1 --执行存储过程 exec up_stu (2)创建有参数的存储过程。 --创建有参数的存储过程 create proc up_stu2 @sno char(7) as if exists (sel...

专注Java后端技术干货、项目源码总结分享,期待您的关注。 1362

Oracle数据库存储过程程及SQL开发建议

Oracle数据库存储过程程及SQL开发建议         存储过程由于集中了大量使用SQL语句,如果没有统一的规范,读起来是非常烦的。因此,存储过程的代码格式、变量命名在每个公司都有自己的规范。 1.代码格式 好的格式,有利于自己也有利于他人。 CREATE OR REPLACE PROCEDURE procedure_name [(parameter_name [OUT] da...

144

为什么阿里明确禁止使用存储过程?——来自一线开发者的深度分析与实战总结

对比维度传统金融(适合)互联网场景(不适合)架构模式集中式架构分布式架构数据库商业数据库(Oracle、DB2)开源数据库(MySQL、TiDB)安全要求数据交给厂商维护数据自主可控性能瓶颈可接受高成本硬件强调资源效率与弹性扩展技术栈存储过程、PL/SQL微服务、Java、缓存中间件。

qq_46371374的博客 1061

让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议

第2部分 数据库SQL语言数据库存储过程中的重要表信息的保存及相关建议 1. 存储过程中的重要表信息的保存        在很多存储过程中,会涉及到对表数据的更新、插入或删除等,为了防止修改之后的表数据出现问题,同时方便追踪问题,一般会为一些重要的表建立一个对应的debug表。这个debug表中的字段要包括原表的所有字段,同时要增加操作时间、操作码和操作描述等字段信息。        例如,在某项

周兆熊的专栏 2242

SQL 存储过程与函数全攻略:从创建到实战,一文掌握核心用法

存储过程与函数是数据库开发中的高效工具,能够封装SQL逻辑、减少代码重复、提升性能。存储过程支持IN/OUT/INOUT参数模式,可实现复杂业务逻辑和事务处理;函数则必须返回单一值,适合简单计算。二者都支持条件判断、循环等流程控制,并能通过游标处理结果集。关键区别在于:存储过程用CALL调用,无返回值或通过参数返回;函数在SELECT中使用,必须返回单值。建议根据场景选择:复杂业务用存储过程,简单计算用函数,同时注意权限管理和避免过度封装。合理使用可显著提升数据库应用的开发效率和安全性。

XDLYSJ的博客 1696

存储过程开发规范

避免SQL注入、避免动态SQL拼接(除非必要),遵守权限最小化原则。:业务复杂时,采用“主存储过程 + 子存储过程”的模式拆解流程。建议设计专门日志表,记录调用参数、结果、耗时、调用链信息。:每个存储过程应具备可测试性和可追踪性,避免隐式逻辑。:每个存储过程只处理一类业务职责,避免多种职责混杂。所有存储过程应存于代码仓库(如Git),版本统一管理。:注意索引命中、批量处理、事务控制,减少资源占用。子过程不允许写日志(防止碎片化记录和事务污染)每次修改必须有变更记录,说明用途、时间、开发者。

nbsaas-boot基于Request-Response的企业级快速开发框架 812

存储过程使用建议

首先来说,在企业级应用开发中,我是不赞成大量使用存储过程的。 不建议使用存储过程的原因 其一: 各种数据库的存储过程语法相差很大,给将来的数据库移植带来很大的困难 其二: 不利于版本控制,代码无法Diff和回滚,多人编辑无法同步。 虽然数据库建模工具可以把脚本保存为文件,然后进行Diff,但终究功能有限。 其三: 编码不便,其实也就是说数据库脚本语言功能有限, 无法定义数组,集...

weixin_30830327的博客 88

存储函数与存储过程(有这一篇就够了)

存储函数与存储过程一、存储过程1.理解2.参数的分类3.存储过程使用创建使用二、存储函数的使用创建使用三、对比存储函数和存储过程四、存储过程与函数的查看,修改,删除查看修改删除五.、关于存储过程使用的争议6.1 优点6.2 缺点阿里开发规范 一、存储过程 1.理解 含义:存储过程的英文是 Stored Procedure。它的思想很简单,就是一组经过预先编译的 SQL 语句的封装。 **执行过程:**存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服

qq_58267473的博客 1万+

现代化开发为什么不推荐使用存储过程

存储过程在数据库中扮演着非常重要的角色,但技术推陈出新,业务发展多态化,已经有更多的新技术方案可替代存储过程适应现代化开发。1.我们现在用的数据库,不是最终确定的数据库。在高并发环境下,这种锁定机制可能导致阻塞,即一个存储过程正在执行时,其他进程可能需要等待锁释放才能继续,这会影响系统的吞吐量。例如,如果存储过程中有复杂的事务逻辑或大量数据返回给客户端,那么可能会消耗较多的数据库资源,影响整体性能。:存储过程通常在数据库服务器上执行,如果并发请求量过大,可能会超过单个数据库服务器的能力,导致性能瓶颈。

诗三百的博客 1882

MySql使用存储过程开发

使用存储过程解决数据处理问题,很多变化频繁的业务逻辑,如果通过存储过程实现,在变更时,就会显得特别简单和方便。只要通过发布脚本就可实现。不得不说,当年,通过Microsoft SqlServer开发数据库及报表应用,是真的好用。多年后的今天,发现如今的数据库应用是MySql的天下了,免费开源是真香,使用第三方工具进行MySql的开发还是不错的............

all_night_in的博客 1788

日常运维经验分享 - 合理使用存储过程提高运维效率

背景介绍 大部分运维DBA都会认为,存储过程(Procedure)应该是开发人员需要掌握的知识,应该由开发人员编写和维护。但实际上运维 DBA 在日常工作中还是经常会需要使用和维护存储过程的,因为存储过程可与 SQL 一起在数据库内实现较为复杂的逻辑需求,在实现某些功能是特别有用。如果因为存储过程的设计或存储过程某一模块的编写不合理,将会影响数据库或应用系统的正常使用,这时仍然需

lzw5210的博客 2626

存储过程详解与实例

存储过程 1、存储过程的优缺点 优点 通过把处理封装在容易使用的单元中,简化复杂的操作; 简化对变动的管理; 通常存储过程有助于提高应用程序的性能; 存储过程有助于减少应用程序和数据库服务器之间的流量,因为应用程序不必发送多个冗长的 SQL 语句,而只用发送存储过程的名称和参数; 存储的程序对任何应用程序都是可重用的和透明的。 存储的程序是安全的。 缺点 如果使用大量存储过程,那么使用这些存储过程的每个连接的内存使用量将会大大增加。 存储过程的构造使得开发具有复杂业务逻辑的存储过程变得更加困难; 很难调试

scj0725的博客 2万+

等精度频率计.rar_测量频率_等精度_等精度频率计_频率_频率计 FPGA

等精度频率计,设置不同的闸门,使得测得的结果不随频率的变化而发生精度的变化,测量范围1-25MHZ,在Altera cycloneIII芯片的FPGA开发板上实现。

上一篇: 当 今 社 会 的 十 句 大 实 话
下一篇: Oracle9i的Flashback查询
q30
q30
博客等级 码龄22年 6粉丝 112原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值