2009-02-04 51 views
4

在最近推出的網站上,我注意到,遠遠超過網站上實際的大量查詢,實際上是數百萬個查詢中花費最高的請求NAMES,平均時鐘超過2.3秒,而各種多連接聯合查詢遠低於2秒。最後,這將它放在慢速查詢日誌的頂部附近,我只是想不出優化它的方法。緩慢查詢日誌頂部附近的MySQL「SET NAME」

這似乎並不是一個常見問題,因爲我沒有發現它提及它使用谷歌搜索。

由於SET NAMES約爲整理,這裏是相關信息:

  • MySQL的字符集是UTF-8的Unicode(UTF-8)
  • 數據庫連接校對是utf8_unicode_ci
  • 數據庫和所有其表使用utf8_general_ci

FWIW,這是運行MySQL 5.0.45日誌。數據庫服務器是localhost。

回答

6

如果所有查詢都很慢,則SET NAMES在服務器上的優先級可能非常低,因此請等到負載停止運行。如果您有很多其他查詢需要很長時間執行,您可能需要先嚐試優化這些查詢。

[mysqld] 
init-connect = 'SET NAMES utf8' 

這可以確保字符集設置爲UTF-8,當一個客戶端連接,所以:

另一種解決這個「問題」,可以在服務器上添加以下內容到的my.cnf客戶端不必等待這個「查詢」的結果。您可能想要禁用軟件中的SET NAMES查詢。

主要是,我不會擔心太多,除非你真的有很多SET NAMES需要這麼長時間。

+0

感謝您的建議。沒有那麼多緩慢的查詢,這就是爲什麼集合名稱是計數最慢的時間*:它每天吃幾分鐘,而不像實際的重度查詢。我會嘗試幾天的建議;我沒有想過以這種方式使用my.cnf。 – FGM 2009-02-06 18:43:09