存储过程的性能如何?值得使用它们而不是在PHP/MySQL调用中实现复杂的查询吗?MySQL存储过程与复杂查询
回答
存储过程会给你一个小的性能提升,但主要是它们用于做一个简单的查询很难或不可能完成的任务。存储过程对于简化许多不同类型客户端的数据访问非常有用。数据库管理员喜欢它们是因为它们控制数据库的使用方式,而不是将这些细节留给开发人员。
寻找索引和适当的表设计以获得更好的性能。
在MySQL或任何其他SQL服务器(如MSSQL或Oracle)中,存储过程大大提高了所涉及查询的速度,因为这已经被编译。存储过程比直接查询更安全,并且作为数据库中的对象可以由所有者管理,从而为每个用户提供正确的访问权限。
使用存储过程,您还可以隐藏查询和过程的逻辑,并向开发团队和其他程序员提供一个“黑匣子”,以便插入参数并接收结果。
明确存储过程的岩石!
从MySQL 5.1文档: 存储程序可以在某些情况下特别有用:
当多个客户端应用程序是用不同的语言或工作在不同的平台,但需要执行相同的数据库操作。
安全性至关重要。例如,银行为所有常见操作使用存储过程和函数。这提供了一致且安全的环境,并且例程可以确保每个操作都被正确记录。在这样的设置中,应用程序和用户将不能直接访问数据库表,但只能执行特定的存储例程。
存储的例程可以提供改进的性能,因为需要在服务器和客户端之间发送较少的信息。折中的原因是这会增加数据库服务器上的负载,因为更多的工作是在服务器端完成的,而在客户端(应用程序)端则更少。如果许多客户机(如Web服务器)仅由一个或几个数据库服务器提供服务,请考虑这一点。
存储的例程还允许您在数据库服务器中拥有函数库。这是现代应用程序语言共享的一项功能,它允许在内部进行此类设计(例如,通过使用类)。即使在数据库使用范围之外,使用这些客户端应用程序语言功能对程序员也是有益的。
正如向我指出在JohnFX的前面的回答礼貌:
“的存储 程序的性能好处是可疑的,并在 最好的一些阅读材料最少在这 点:
http://statestreetgang.net/post/2008/04/My-Statement-on-Stored-Procedures.aspx
http://betav.com/blog/billva/2006/05/are_stored_procedures_faster_t.html
享受。
严重简化 - 存储过程性能等于或稍微优于代码,其代价是数据库服务器负载。由于大多数数据库系统都关心多用户访问,并且正在使用数据库服务器的商品硬件,所以使用卸载数据库服务器的代码可能会赢得整体。对于高端数据库服务器,> 4个内核,> 32gb ram,SP加载通常不是问题。
存储程序;
- 传递查询数据较少 - 井编写的代码
- 最小速度提高解析&缓存为“稍好” - 最小速度以及编写的代码
- 移动执行加载到数据库服务器改进与客户端(网络服务器)相比,可能将负载分散到许多系统中。 - 速度的提高很大程度上取决于实际的代码和数据量,包括传输的“超额”数据。相当多的代码传输比实际使用的数据更多的数据(db库,写得不好的查询,select *等)
不要早期优化。
存储过程比速度有许多其他好处,列表中的安全性很高。 SP和代码等使用的测试和分析框架..
学习会 -
在一个单一的编程环境,效益可通过SP编程的学习曲线,SP测试框架,版本控制的多种方法抵销明确回答此问题,并指导您为应用程序提供更好的“性能”,而不仅仅是选择SP或即席查询。
回答“是否值得” - 如果您没有测试/分析框架,那么您只能猜测。基于我的代码和硬件的任何答案都可能与您的无关。
我在使用数据库(Sybase,Oracle,MS SQL,MySQL,Postgres)存储过程的许多Perl/TCL/PHP/C Web应用程序方面的实际经验不会大大提高性能。但我仍然经常使用它们,只是出于其他原因而不是表现。它们可以极大地改进特定的复杂查询,但这很少是代码的大部分和总体处理时间。
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服务器 的每个单一连接都维护着自己的存储过程高速缓存。
花一点时间阅读文章的其余部分和评论。这很短,你会对这些问题有更好的理解。
- 1. 复杂查询的存储过程
- 2. MySQL查询缓存,复杂SQL查询
- 3. MySQL复杂查询
- 4. MySQL复杂查询
- 5. MySQL复杂查询
- 6. Mysql存储过程动态查询
- 7. 复杂的SQL查询与MySQL?
- 8. 与子查询的存储过程
- 9. 使用LINQ查询与存储过程
- 10. MySQL的复杂查询
- 11. 复杂的MySQL查询
- 12. MySQL的last_query_cost复杂查询
- 13. Mysql的php复杂查询
- 14. MySQL的复杂查询
- 15. 复杂MySQL查询它是
- 16. 复杂的MySQL查询
- 17. 复杂的MySQL查询?
- 18. mysql中的复杂查询
- 19. PL/SQL复杂的存储过程
- 20. 绕过复杂查询的存储库模式可以吗?
- 21. 存储过程中的复杂处理与.NET应用程序
- 22. 复杂的数据库查询与数据和存储过程的预定存储
- 23. 存储过程与最新MySQL中的普通SQL查询?
- 24. Mysql查询与存储过程的性能
- 25. MySQL性能:原始查询与存储过程
- 26. SQL查询/存储过程
- 27. 复杂查询过滤
- 28. 复杂的查询与if
- 29. 复杂的查询与SQLite
- 30. PHP/MongoDB与复杂查询
MySQL在编译存储过程之前在现有版本的已建立会话中执行它们之前 – 2013-01-17 00:59:42