2013-03-03 65 views
2

我试图优化我的一些PHP代码。我发现我的PHP脚本的大部分时间都是在脚本开始连接到mysql数据库的过程中花费的。任何方式来保持在PHP连接到MySQL数据库?

我只在开始时连接数据库一次,并在脚本结尾处关闭数据库连接。

但是对于每个请求这个页面的用户都必须建立一个新的连接。

有没有办法保存对数据库的引用并共享所有请求?

+0

“我想,大部分时间......”你想通怎么样?你真的测试过它吗?如果不测试瓶颈是什么,做这种事情是没有用的。 – PeeHaa 2013-03-03 13:54:10

+0

我测试过了。 ;) – 2013-03-03 13:56:30

+0

你也可能想看看缓存。 – PeeHaa 2013-03-03 14:01:42

回答

2

你可以使你的连接持久化(PDO使用PDO::ATTR_PERSISTENT => true),但我的推理是找出为什么你的脚本花了很多时间连接到mysql并在那里做一些改进。

考虑一下:

  • 使用MySQL服务器的IP,而不是主机名,以消除解析DNS所需的时间。
  • 禁用MySQL的autocompletition:(评论skip-auto-rehashmy.cnf
  • 如果你赚了很多,这将一遍又一遍回到同一件事的查询,可以考虑使用一个缓存系统缓存查询结果。
  • codereview.stackexchange.com上发布代码,以获得有关进一步改进代码的其他专业知识。
  • 进一步调试问题,从控制台连接到MySQL服务器,并检查打开连接,更改数据库,选择所需的时间等
5

是的,你可以做到这一点。

如果您使用MySQLi扩展(老一个未经末是过时!),你可以通过创建实例时传递p:作为前缀的主机名的持久连接:

请参阅mysqli::__construct

如果你真的使用旧的MySQL扩展,有mysql_pconnect的持久连接


或者,如果您使用的是PDO,那么您可以使用setAttribute()来使用PDO::ATTR_PERSISTENT

有关在PDO中使用长连接的文档。

+3

我可以知道downvote的原因吗? – hjpotter92 2013-03-03 13:58:02

+0

看起来有人花时间报复你们俩投票吗? – PeeHaa 2013-03-03 14:01:08

+0

@PeeHaa猜猜所以。 – hjpotter92 2013-03-03 14:04:38