Насколько дорогостоящей является операция подключения к базе данных Mysql?


В некоторых функциях кода php будет выполнять сотни или в некоторых случаях тысячи запросов к одним и тем же таблицам с использованием цикла. В настоящее время он создает новое подключение к базе данных для каждого запроса. Насколько дорога эта операция? Увижу ли я значительное увеличение скорости при повторном использовании одного и того же соединения? Может потребоваться довольно много рефакторинга, чтобы изменить это поведение и использовать ту же базу данных.

php использует mysql_connect для подключения к базе данных.

Просто на основе то, что я здесь сказал, есть ли другие очевидные оптимизации, которые вы бы рекомендовали (я читал, например, о блокировке таблиц...)?

РЕДАКТИРОВАТЬ: Мой вопрос больше касается преимуществ использования одного соединения, а не того, как избежать использования более одного.

Author: matzahboy, 2011-06-09

3 answers

Документация для mysql_connect состояния:

Если будет выполнен второй вызов mysql_connect() с теми же аргументами, новая ссылка не будет установлена, но вместо этого будет возвращен идентификатор ссылки уже открытой ссылки.

Таким образом, если вы не подключаетесь с другими учетными данными, изменение этой части вашего кода не повлияет на производительность.

 5
Author: Sonny, 2011-06-09 17:03:38

Я использую Zend_Framework, и профилирование моей базы данных показывает, что само соединение занимает почти в 10 раз больше времени, чем большинство моих запросов. У меня есть две разные базы данных, к которым я подключаюсь, и только один раз подключаюсь к каждой для каждого запроса.

Я бы сказал, что повторное подключение для каждого запроса - это плохой дизайн, но вопрос рефакторинга сложнее. Вопросы, которые необходимо задать:

  1. Существуют ли в настоящее время проблемы с производительностью?
  2. Вы сделали профилирование кода, чтобы сузить где возникают проблемы с производительностью?
  3. Сколько времени потребуется для этого рефакторинга? Учитывайте необходимое тестирование, а не только время кодирования.
 1
Author: Sonny, 2011-06-09 14:59:08

Ответ на первоначальный вопрос должен быть очевиден. Если это не очевидно для вас, то все равно должно быть очевидно, как выяснить для себя, насколько это влияет.

Существуют ли другие очевидные оптимизации

Нет - потому что вы не предоставили никаких подробностей ни о структуре таблицы, ни о выполняемых запросах.

 0
Author: symcbean, 2011-06-09 15:15:50