首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

存储过程与SQL语句怎么选择

2023-11-11 来源:骅佗教育

应用存储过程的优点:1.具有更好的性能存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以提高数据库执行速度。2.功能实现更加灵活存储过程中可以应用条件判断和游标等语句,有很强的灵活性,可以直接调用数据库的一些内置函数,完成复杂的判断和较复杂的运算。3.减少网络传输复杂的业务逻辑需要多条 SQL 语句,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会减少,降低了网络负载。4.具有更好的安全性(1)数据库管理人员可以更好的进行权限控制,存储过程可以屏蔽对底层数据库对象的直接访问,使用 EXECUTE 权限调用存储过程,无需拥有访问底层数据库对象的显式权限。(2)在通过网络调用过程时,只有对执行过程的调用是可见的。无法看到表和数据库对象名称,不能嵌入SQL 语句,有助于避免 SQL 注入攻击。存储过程的弊端:1.架构不清晰,不够面向对象存储过程不太适合面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,业务逻辑在存储层实现,增加了业务和存储的耦合,代码的可读性也会降低,2.开发和维护要求比较高存储过程的编写直接依赖于开发人员,如果业务逻辑改动较多,需要频繁直接操作数据库,大量业务降维到数据库,很多异常不能在代码中捕获,出现问题较难排查,需要数据库管理人员的帮助。 3.可移植性差过多的使用存储过程会降低系统的移植性。在对存储进行相关扩展时,可能会增加一些额外的工作。存储过程与SQL语句如何抉择:普通的项目开发中,不建议大量使用存储过程,对比SQL语句,存储过程适用于业务逻辑复杂,比较耗时,同时请求量较少的操作,例如后台大批量查询、定期更新等。

(1)当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时可以考虑应用存储过程(2)在一个事务的完成需要很复杂的商业逻辑时可以考虑应用存储过程(3)比较复杂的统计和汇总可以考虑应用后台存储过程

存储过程与SQL语句怎么选择

标签:扩展   额外   操作   有助于   对象   查询   存储   相关   请求   

小编还为您整理了以下内容,可能对您也有帮助:

存储过程与SQL语句如何选择

数据库擅长存储与索引,在目前的互联网系统架构中,服务器的扩展要比存储的扩展更简单,

需要考虑系统可能的瓶颈在服务器还是数据存储,存储过程有它的优点,应该在开发中合理的选用。

应用存储过程的优点

存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并存储起来,以后当需要数据库提供相同的服务时,只需再次执行该存储过程。

1.具有更好的性能

存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以提高数据库执行速度。

2.功能实现更加灵活

存储过程中可以应用条件判断和游标等语句,有很强的灵活性,可以直接调用数据库的一些内置函数,完成复杂的判断和较复杂的运算。

3.减少网络传输

复杂的业务逻辑需要多条 SQL 语句,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会减少,降低了网络负载。

4.具有更好的安全性

(1)数据库管理人员可以更好的进行权限控制,存储过程可以屏蔽对底层数据库对象的直接访问,使用 EXECUTE 权限调用存储过程,无需拥有访问底层数据库对象的显式权限。

(2)在通过网络调用过程时,只有对执行过程的调用是可见的。无法看到表和数据库对象名称,不能嵌入SQL 语句,有助于避免 SQL 注入攻击。

存储过程的弊端

1.架构不清晰,不够面向对象

存储过程不太适合面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,业务逻辑在存储层实现,增加了业务和存储的耦合,代码的可读性也会降低,

2.开发和维护要求比较高

存储过程的编写直接依赖于开发人员,如果业务逻辑改动较多,需要频繁直接操作数据库,大量业务降维到数据库,很多异常不能在代码中捕获,出现问题较难排查,需要数据库管理人员的帮助。

3.可移植性差

过多的使用存储过程会降低系统的移植性。在对存储进行相关扩展时,可能会增加一些额外的工作。

存储过程与SQL语句如何抉择

架构设计没有绝对,只有在当前的场景下最合适的。

普通的项目开发中,不建议大量使用存储过程,对比SQL语句,存储过程适用于业务逻辑复杂,比较耗时,同时请求量较少的操作,例如后台大批量查询、定期更新等。

(1)当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时可以考虑应用存储过程(2)在一个事务的完成需要很复杂的商业逻辑时可以考虑应用存储过程(3)比较复杂的统计和汇总可以考虑应用后台存储过程

存储过程与SQL语句如何选择

标签:建议可读性名称natexe函数情况cut开发人员

讨论下:SQL语句写在程序里面还是用存储过程好

一分为二的看

如果就维护而言,当放在程序里面比较方便,因为要更新的时候只要更新程序即可,如果用存储过程的话,则即要更新程序又要更新存储过程.

如果就执行效率而言,放在存储过程里面要比放在程序里面要高,因为存储过程里面的语句是先编译好,直接调用,而程序里面的语句则要进行编译再执行.

用存储过程好,还是在代码中写SQL语句好

这个问题看你从那方面考虑了,如果说从方便性,简易性来说存储过程当然好点了,许多代码都省了,还方便维护,不是随时改代码,与数据库交互次数也少了。但是存储过程的执行速度肯定没单条sql快,在响应速度来说就差了点,再说安全性也会差了点,一旦数据泄露就危险了,毕竟泄露一个sql和泄露一个存储过程来说,肯定存储过程的泄露威胁也会大很多。

用存储过程好,还是在代码中写SQL语句好

这个问题看你从那方面考虑了,如果说从方便性,简易性来说存储过程当然好点了,许多代码都省了,还方便维护,不是随时改代码,与数据库交互次数也少了。但是存储过程的执行速度肯定没单条sql快,在响应速度来说就差了点,再说安全性也会差了点,一旦数据泄露就危险了,毕竟泄露一个sql和泄露一个存储过程来说,肯定存储过程的泄露威胁也会大很多。

求 存储过程和Sql语句之间的区别 余额准确越好

性能上
存储过程优于SQL语句,
原因:存储过程是预编译的,而SQL语句是执行一次就需要编译一次。

安全性
存储过程仍然优于SQL语句,
可以认为存储过程是封装好的,代码没有在程序中直接暴露出来,因此被代码注入的可能性就大大降低,提高程序安全性,而SQL语句则是赤裸裸的放在前台代码中,很容易被黑客利用。

那是不是存储过程就一定好于SQL语句呢?
非也,杀鸡还是用杀鸡的刀吧,比如你只是想取个结果集,那还是用SQL语句就可以了,但是在处理一些稍微复杂的业务逻辑时,还是用存储过程比较好。

求 存储过程和Sql语句之间的区别 余额准确越好

性能上
存储过程优于SQL语句,
原因:存储过程是预编译的,而SQL语句是执行一次就需要编译一次。

安全性
存储过程仍然优于SQL语句,
可以认为存储过程是封装好的,代码没有在程序中直接暴露出来,因此被代码注入的可能性就大大降低,提高程序安全性,而SQL语句则是赤裸裸的放在前台代码中,很容易被黑客利用。

那是不是存储过程就一定好于SQL语句呢?
非也,杀鸡还是用杀鸡的刀吧,比如你只是想取个结果集,那还是用SQL语句就可以了,但是在处理一些稍微复杂的业务逻辑时,还是用存储过程比较好。

存储过程跟SQL语句比较,各有什么优点和缺点?

SQL存储过程放在SQL数据库中,1,因此在程序中调用的时候不必自己拼接sql语句。2,SQLSERVER会对存储过程进行预编译,因此速度快。3,在网络上不必传输冗长的SQL语句,而是直接调用存储过程的名字,因此可以加快速度当然,在一些外包软件开发中,是不允许使用存储过程的。因为对方不可以把数据库暴露给你,此时你只能使用SQL语句。不过国内的一些小型企业使用SQL存储过程还是很流行的。因为程序代码里不包含SQL语句,因此会数据库会相对安全一些。

存储过程跟SQL语句比较,各有什么优点和缺点?

SQL存储过程放在SQL数据库中,1,因此在程序中调用的时候不必自己拼接sql语句。2,SQLSERVER会对存储过程进行预编译,因此速度快。3,在网络上不必传输冗长的SQL语句,而是直接调用存储过程的名字,因此可以加快速度当然,在一些外包软件开发中,是不允许使用存储过程的。因为对方不可以把数据库暴露给你,此时你只能使用SQL语句。不过国内的一些小型企业使用SQL存储过程还是很流行的。因为程序代码里不包含SQL语句,因此会数据库会相对安全一些。

数据库操作,是用存储过程好,还是直接程序里拼sql语句好?

    存储过程可控(其实就是你想增删一个条件的话,比较简单)

    好修改(只需要修改存储过程就行了,联调也比较简单)

    好调试(仅仅调试存储过程比拼语句简单多了)

    也有不好,比如可能哟点延长系统响应时间。(毕竟隔了一层)

    如果存储过程失效,那么该存储过程的其他部分也不能用了。

    总结起来其实就是相对简单,好调试,但是也有一点风险。

存储过程与带参数的SQL语句比较?

存储过程的优缺点:

优点:

1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcere为封装此代码提供了一个替换位置。

2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划-- 实际上是 Microsoft SQL Server为在存储过程中获取由 T-SQL 指定的结果而必须采取的步骤的记录。)缓存改善性能。

........但sql server新版本,执行计划已针对所有 T-SQL 批处理进行了缓存,而不管它们是否在存储过程中,所以没比较优势了。

3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。

4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用 (RPC) 处理服务器上的存储过程而提高性能。RPC 封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。

5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。

6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。

7.更好的版本控制,通过使用 Microsoft Visual SourceSafe 或某个其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过程。

8.增强安全性:

a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;

b、提高代码安全,防止 SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数);

c、SqlParameter 类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。

缺点:

1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。

2.可移植性差

由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择。

显示全文