MySQL "SET NAMES" в верхней части медленного журнала запросов - PullRequest
4 голосов
/ 05 февраля 2009

На недавно запущенном сайте я заметил, что, по сравнению с большими объемами запросов на сайте, наиболее дорогостоящим из нескольких миллионов запросов является SET NAMES, который работает в среднем более 2,3 секунд, а различные -соединение запросов значительно ниже 2 секунд. В конце концов, это помещает его в верхнюю часть медленного журнала запросов, и я просто не могу придумать, как его оптимизировать.

Это, похоже, не является общей проблемой, так как я не нашел упоминаний о поиске в Google.

Так как SET NAMES о сопоставлении, вот соответствующая информация:

  • MySQL Charset - это кодировка UTF-8 Unicode (utf8)
  • Сортировка соединения с базой данных: utf8_unicode_ci
  • база данных и все ее таблицы используют utf8_general_ci

FWIW, это работает MySQL 5.0.45-log. Сервер БД - localhost.

1 Ответ

6 голосов
/ 05 февраля 2009

Если все запросы медленные, SET NAMES может иметь очень низкий приоритет на сервере и, следовательно, ждать, пока нагрузка не прекратится. Если у вас есть много других запросов, выполнение которых занимает много времени, вы можете сначала попытаться оптимизировать их.

Другим решением этой «проблемы» может быть добавление этого в ваш my.cnf на сервере:

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

Это гарантирует, что для набора символов будет установлено UTF-8, когда клиент подключается, поэтому клиенту не нужно ждать результата этого «запроса». Возможно, вы хотите отключить запрос SET NAMES в своем программном обеспечении.

В основном, я бы не стал сильно волноваться, если бы у вас не было МНОГО SET NAMES, которое занимает столько времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...