将mysql连接通过页面打开是完全鲁莽吗?

时间:2009-12-18 01:57:34

标签: php mysql

查询数据库时,是否有可能感到极度偏执?每次必须进行新的查询时,我都会打开和关闭mysql连接。我担心(尤其是启用了ajax的页面)这会导致性能下降。

我应该继续使用此方法,还是至少在每个页面中打开和关闭一次连接(而不是每个查询)? (我用php btw写的)

谢谢。

5 个答案:

答案 0 :(得分:7)

是的,每次连接的开销都很大。我建议你在完成后关闭它,只是在没有运行查询的情况下打开连接就不太可能让你知道漏洞。

答案 1 :(得分:3)

如果可以使用PHP,我建议使用连接池。这是一种同时最大化性能和最小化连接时间的方法。

答案 2 :(得分:3)

您应该立即关闭MySQL连接。最好为整个PHP脚本使用单个连接。如果您没有明确地,PHP将自动关闭连接。

打开新连接会产生一些小的时间损失,特别是如果MySQL位于网络上的另一台服务器上。新的TCP连接需要three-way handshake,每个TCP连接都会占用at least two minutes的内核资源。

虽然PHP不支持完整的连接池,但程序MySQL API确实支持持久连接。有关详细信息,请参阅mysql_pconnect()。在我的办公室,我们使用pconnect来避免在我们的高流量PHP站点上崩溃TCP堆栈。

答案 3 :(得分:0)

考虑PHP数据对象,它可以为您保持持久连接。您实际上只需连接一次凭据,然后缓存连接。使用以下内容创建连接:

$dbh = new PDO('mysql:host=HOSTNAME;dbname=DBNAME', 'USER', 'PASSWORD', array(PDO::ATTR_PERSISTENT => true));

有关详细信息,请参阅php手册中的this page

答案 4 :(得分:0)

不能代表PHP,但是当我在Apache / Perl中编写这种东西时,我通常会做两件事来提升性能:

a)只要Apache守护进程允许MySQL句柄保持打开状态。 b)保持缓存的语句句柄(使用LRU缓存)。

在生产服务器上,其中一些MySQL句柄已存在数天,为数千个非常复杂的SQL查询提供服务。这不是问题。