2009-07-20 113 views

回答

15

存储过程会给你一个小的性能提升,但主要是它们用于做一个简单的查询很难或不可能完成的任务。存储过程对于简化许多不同类型客户端的数据访问非常有用。数据库管理员喜欢它们是因为它们控制数据库的使用方式,而不是将这些细节留给开发人员。

寻找索引和适当的表设计以获得更好的性能。

2

在MySQL或任何其他SQL服务器(如MSSQL或Oracle)中,存储过程大大提高了所涉及查询的速度,因为这已经被编译。存储过程比直接查询更安全,并且作为数据库中的对象可以由所有者管理,从而为每个用户提供正确的访问权限。

使用存储过程,您还可以隐藏查询和过程的逻辑,并向开发团队和其他程序员提供一个“黑匣子”,以便插入参数并接收结果。

明确存储过程的岩石!

从MySQL 5.1文档: 存储程序可以在某些情况下特别有用:

当多个客户端应用程序是用不同的语言或工作在不同的平台,但需要执行相同的数据库操作。

安全性至关重要。例如,银行为所有常见操作使用存储过程和函数。这提供了一致且安全的环境,并且例程可以确保每个操作都被正确记录。在这样的设置中,应用程序和用户将不能直接访问数据库表,但只能执行特定的存储例程。

存储的例程可以提供改进的性能,因为需要在服务器和客户端之间发送较少的信息。折中的原因是这会增加数据库服务器上的负载,因为更多的工作是在服务器端完成的,而在客户端(应用程序)端则更少。如果许多客户机(如Web服务器)仅由一个或几个数据库服务器提供服务,请考虑这一点。

存储的例程还允许您在数据库服务器中拥有函数库。这是现代应用程序语言共享的一项功能,它允许在内部进行此类设计(例如,通过使用类)。即使在数据库使用范围之外,使用这些客户端应用程序语言功能对程序员也是有益的。

+0

MySQL在编译存储过程之前在现有版本的已建立会话中执行它们之前 – 2013-01-17 00:59:42

2

严重简化 - 存储过程性能等于或稍微优于代码,其代价是数据库服务器负载。由于大多数数据库系统都关心多用户访问,并且正在使用数据库服务器的商品硬件,所以使用卸载数据库服务器的代码可能会赢得整体。对于高端数据库服务器,> 4个内核,> 32gb ram,SP加载通常不是问题。

存储程序;

  1. 传递查询数据较少 - 井编写的代码
  2. 最小速度提高解析&缓存为“稍好” - 最小速度以及编写的代码
  3. 移动执行加载到数据库服务器改进与客户端(网络服务器)相比,可能将负载分散到许多系统中。 - 速度的提高很大程度上取决于实际的代码和数据量,包括传输的“超额”数据。相当多的代码传输比实际使用的数据更多的数据(db库,写得不好的查询,select *等)

不要早期优化。

存储过程比速度有许多其他好处,列表中的安全性很高。 SP和代码等使用的测试和分析框架..

学习会 -

在一个单一的编程环境,效益可通过SP编程的学习曲线,SP测试框架,版本控制的多种方法抵销明确回答此问题,并指导您为应用程序提供更好的“性能”,而不仅仅是选择SP或即席查询。

回答“是否值得” - 如果您没有测试/分析框架,那么您只能猜测。基于我的代码和硬件的任何答案都可能与您的无关。

我在使用数据库(Sybase,Oracle,MS SQL,MySQL,Postgres)存储过程的许多Perl/TCL/PHP/C Web应用程序方面的实际经验不会大大提高性能。但我仍然经常使用它们,只是出于其他原因而不是表现。它们可以极大地改进特定的复杂查询,但这很少是代码的大部分和总体处理时间。

8

Yikes我讨厌别人读这些答案,并得到错误的印象。在“MySQL”与“SQL server/Oracle”上的“Stored Whatever”实现之间存在一些非常重要的差异。

参见:http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/

,询问这个问题,每个人都承担一些关于MySQL的 存储过程的执行情况;他们错误地认为存储的 过程被编译并存储在与Microsoft SQL Server [1]或Oracle [2]中的存储过程高速缓存类似的全局存储过程高速缓存 中。

这是错误的。平展不正确。

这是事实:与MySQL服务器 的每个单一连接都维护着自己的存储过程高速缓存。

花一点时间阅读文章的其余部分和评论。这很短,你会对这些问题有更好的理解。