2009-02-04 110 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