在最近推出的网站上,我注意到,在网站上的实际重要查询中,数百万个查询中最昂贵的请求实际上是SET NAMES,平均时间超过2.3秒,而各种多-join union查询远低于2秒。最后,这使它接近慢查询日志的顶部,我只是想不出一种优化它的方法。
这似乎不是一个常见的问题,因为我没有发现谷歌搜索。
由于SET NAMES是关于整理的,因此这里是相关信息:
FWIW,这是运行MySQL 5.0.45-log。数据库服务器是localhost。
答案 0 :(得分:6)
如果所有查询都很慢,则SET NAMES在服务器上的优先级可能非常低,因此要等到负载停止运行。如果您有很多其他需要花费很长时间执行的查询,您可能需要先尝试优化这些查询。
这个“问题”的另一个解决方案是将其添加到服务器上的my.cnf:
[mysqld]
init-connect = 'SET NAMES utf8'
这确保在客户端连接时将字符集设置为UTF-8,因此客户端不必等待此“查询”的结果。您可能希望在软件中禁用SET NAMES查询。
主要是,我不会太担心,除非你真的有很多设置名称需要很长时间。