MySQL“SET NAMES”靠近慢查询日志的顶部

时间:2009-02-04 21:28:51

标签: mysql performance logging

在最近推出的网站上,我注意到,在网站上的实际重要查询中,数百万个查询中最昂贵的请求实际上是SET NAMES,平均时间超过2.3秒,而各种多-join union查询远低于2秒。最后,这使它接近慢查询日志的顶部,我只是想不出一种优化它的方法。

这似乎不是一个常见的问题,因为我没有发现谷歌搜索。

由于SET NAMES是关于整理的,因此这里是相关信息:

  • MySQL Charset是UTF-8 Unicode(utf8)
  • 数据库连接排序规则为utf8_unicode_ci
  • 数据库及其所有表使用utf8_general_ci

FWIW,这是运行MySQL 5.0.45-log。数据库服务器是localhost。

1 个答案:

答案 0 :(得分:6)

如果所有查询都很慢,则SET NAMES在服务器上的优先级可能非常低,因此要等到负载停止运行。如果您有很多其他需要花费很长时间执行的查询,您可能需要先尝试优化这些查询。

这个“问题”的另一个解决方案是将其添加到服务器上的my.cnf:

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

这确保在客户端连接时将字符集设置为UTF-8,因此客户端不必等待此“查询”的结果。您可能希望在软件中禁用SET NAMES查询。

主要是,我不会太担心,除非你真的有很多设置名称需要很长时间。