我使用的是php 5.3和postgresql 9.1
目前,我正在通过从DB中获取数据并处理数据并最终在DB中插入/更新/删除来在DB“外部”DB中进行数据库工作,但是当我熟悉postgresql函数时,我已经开始编写了PLPGSQL。
现在,我想知道两者之间是否存在任何速度差异,或者我可以使用哪种速度差异。
此外,更高版本的答案是否相同=> php 5.5和postgresql 9.3
答案 0 :(得分:2)
取决于你做什么。 PL / pgSQL针对数据操作进行了优化 - PHP针对html页面生成进行了优化。一些背景技术是相似的 - 基本结构的速度是相似的 - PHP在字符串操作中明显更快,但PLpgSQL在与PostgreSQL数据库引擎相同的地址空间中运行,并且使用与PostgreSQL数据库引擎相同的数据类型,因此从零开销数据类型转换和进程间通信。
存储过程具有强大的对手和强大的防御者 - 这是任何其他技术,如果你能很好地使用它,它可以适用于小型,大型项目。它有利于分解 - 它自然地将应用程序划分为表示(交互)层和数据操作层。它对于以数据为中心的应用程序非常重要,对于以演示为中心的应用程并且反对者同意这一点,有时候出于性能原因需要存储过程。
我不同意kafsoksilo - 调试,单元测试,维护不是任何问题 - 当你对这项技术有所了解时 - 你可以使用几乎所有的工具,你知道。并且plpgsql语言非常强大(对于数据操作区域)语言 - 具有良好的诊断,清晰和可读的错误消息和最小问题。
答案 1 :(得分:0)
Plpgsql更快,因为您不必获取数据,处理它们然后提交新查询。所有过程都在内部完成,并且也经过预编译,这也提高了性能。
此外,当数据库位于远程服务器而非本地时,您将具有网络往返延迟。有时网络往返延迟高于整个脚本运行所需的时间。
例如,如果您需要在慢速网络上执行10个查询,那么使用plpgsql并执行一个查询将是一个很大的改进。
如果您要执行的处理是获取大块数据,并输出true或false,则plpgsql增益会更大。
另一方面,使用plpgsql并在数据库中放置逻辑,使您的项目更难以调试,修复错误和单元测试。此外,将来更改RDBMS也会变得更加困难。
我的建议是在php处理数据,并且只在出于安全性或数据完整性原因而想要隔离某些逻辑时才使用一些plpgsql,或者你想调整项目以获得最佳性能(应该是第一次发布后的一个问题。)