2009-07-16 81 views
1

我正在使用PostgreSQL处理PHP Web应用程序。所有的SQL查询都是从PHP代码中调用的。我没有看到任何视图,函数或存储过程。据我了解,它总是更好地使用这些数据库子程序,因为它们被存储在数据库中的优势:PHP和数据库:视图,函数和存储过程性能

  • 封装
  • 抽象
  • 访问权限(仅限于数据库管理员)和责任
  • 避免编译

我觉得我读一些有关的性能改进了。我真的不明白为什么球队还没有使用这些。在这种特殊情况下,我想从经验中知道,有没有什么理由不使用它们?

大多数情况下,当代码中有很多“SELECT”查询时,为什么不使用Views?

我正计划重构代码并开始编码数据库服务器上的子例程。我想知道赞成或反对的意见。该项目是相当大的(很多表),并期望大量的数据被存储。您在社交网络中拥有更多内容的数据量非常大。

回答

1

I.视图提供封装,但如果没有仔细设计,它们可能会减慢应用程序。谨慎使用。
二,如果需要,使用函数,没有理由在不需要的时候插入它们。三,存储过程是天赐之物,到处都有静态查询使用它们!

在回应的意见与查询时,尽量使用与存储过程的,视图存储过程的会减轻一些与意见所采取的性能损失。

+0

二,什么时候会“需要”功能? – 2009-07-17 15:49:37

+0

当它不是业务逻辑,但需要逻辑来提取数据。 – WolfmanDragon 2009-07-17 16:45:14

3

在我看来,视图和存储过程通常只是额外的麻烦而没有什么好处。

我已经编写并使用了一堆不同的web应用程序,尽管没有任何用户使用bazillions。具有存储过程的程序很笨拙。具有临时SQL查询的人员很快(使用占位符和其他最佳实践来避免SQL注入)。我最喜欢使用数据库抽象(ORM),因此您的代码可以处理PHP类和对象,而不是直接与数据库交互。我越来越多地转向symfony框架。

另外:一般来说,你不应该过早地优化性能。现在优化快速开发(无需存储过程)。在它工作之后,对您的应用进行基准测试,找出瓶颈并优化它们。当你尝试从一开始就进行优化时,你只是浪费时间并且复杂化。

0

我们尝试用你提到特性只有在那里有显著的好处

做“数据库”,他们属于“架构更改”,而不是
“的部分源代码更改“,并且自然更难以进行版本控制。

无论您做什么,只要确保您完全了解谁更改了什么时间,以便在出现问题时能够进行差异化,回滚和恢复。

+0

您可以轻松地将数据库的表/视图/过程定义提取到(a)文本文件中,然后将它们提交到版本控制。 – txwikinger 2009-07-16 19:41:43

1

存储过程的优点是,因为所有的处理都是在数据库上完成的,所以不会产生网络开销来回分流中间结果集。

缺点是每个RDBMS系统都有自己独特的存储过程语法。通过在存储过程中实现业务逻辑,几乎将应用程序限制为单个数据库产品,如果您希望应用程序独立于数据库,则需要记住一些事项。另外,正如gahooa指出的那样,由于存储过程存在于数据库中,因此作为开发人员访问它们可能会受到本地策略的限制;一些组织只会让DBA接触数据库。

@WolfmanDragon:我不知道观点是否固有地让事情变慢;我想你的里程可能会有所不同,具体取决于视图的复杂程度和您使用的RDBMS。另外,有些RDBMS允许您实现常用视图,因此对基本表的访问速度也很快。

相关问题