2013-03-03 63 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