查询数据库时,是否有可能感到极度偏执?每次必须进行新的查询时,我都会打开和关闭mysql连接。我担心(尤其是启用了ajax的页面)这会导致性能下降。
我应该继续使用此方法,还是至少在每个页面中打开和关闭一次连接(而不是每个查询)? (我用php btw写的)
谢谢。答案 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查询提供服务。这不是问题。