在PHP / MySQL中我应该打开多个数据库连接还是共享1?

时间:2010-01-16 14:42:05

标签: php mysql performance

我想听听别人对此的看法?目前,我在头类型文件中创建一个mysql数据库连接,然后将其包含在我站点的每个页面的顶部。然后,我可以在该1个打开的连接上运行尽可能多的查询。如果页面是由包含的6个文件构建的,并且有15个不同的mysql查询,那么它们都将在这个1连接上运行。

现在有时候我会看到创建多个连接的类,例如每个查询都有1个。

使用一种方法比另一种方法有什么好处吗?我认为一个连接比多个更好,但我可能是错的?

6 个答案:

答案 0 :(得分:10)

创建连接可能很昂贵(我还没有对此声明的引用 编辑:啊哈!Here it is)因此看起来好像共识是使用更少的连接。对单个页面上的所有查询使用单个连接似乎是比多个连接更好的选择。

答案 1 :(得分:6)

在PHP + MySQL中,通常每页使用多个连接没有多大意义(只是速度较慢,占用的RAM多一点)。

它可能有用的唯一方法是更改​​可能干扰其他页面的连接paremters(如整理)。但是好的PHP程序通常不会做那种东西。

此外,最好启用持久连接,以便在多页执行时重用1个MySQL连接。

答案 2 :(得分:2)

如果真的取决于您怀疑该网站会产生的活动水平 - 如果它是一个高流量的网站,您很快就会耗尽连接(除非您将调整MySQL的最大连接设置为愚蠢的高级别,但是这最终会使服务器停止运转。

我通常建议网站的前端应该使用共享数据库对象(singleton is your friend),因为它不需要大量的纪律来写这个就是你的想法不要浪费时间建立联系。如果您需要在后端进行额外的并发查询,那么这不应该是一个很大的交易,因为这可能不是一个高度流量的区域。

答案 3 :(得分:2)

不推荐执行多个小型查询,只需使用一个查询即可完成工作,您可以使用单个查询从多个表和多个数据库中获取数据。请参阅以下链接:

http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query

答案 4 :(得分:1)

我认为使用多个连接没有任何好处,我宁愿认为它是结构不良的标志。这些是我可以考虑使用多个连接的原因:

  • 您必须多次初始化数据库。建立连接时的连接属性(如SET NAMES UTF8)必须在多行上完成。
  • 它肯定比单个连接慢。
  • 非技术性原因:使用您的代码的人很可能不会期望它,并且可能花费数小时调试他在另一个连接中设置的连接属性。

拥有一个全局连接对象(或提供一个的类)是PHP中更好的方法。

答案 5 :(得分:1)

您确定创建多个连接的类不只是在打开连接时返回对已打开连接的引用吗?我已经看到了很多以这种方式构建的东西。每页只使用一个连接,在性能方面确实更好。