2012-11-18 3 views
11

Для установления соединения с MySQLi требуется около 1 секунды для моей локальной системы. Код:Почему мое соединение MySQLi так медленно?

$db = new mysqli('localhost', 'root', 'pass', 'mydb'); 

Почему это так медленно? Это нормально? Могу ли я его улучшить?

+2

Не могли бы вы рассказать нам больше о вашей системе? Какую ОС вы используете, например. – Dale

+1

Вы используете vm-ware для локального сервера? –

+2

Если вы используете Windows, попробуйте '127.0.0.1' вместо localhost. –

ответ

33

Переключить «localhost» на 127.0.0.1.

Таким образом, вместо того, чтобы:

$db = new mysqli('localhost', 'root', 'pass', 'mydb'); 

Использование:

$db = new mysqli('127.0.0.1', 'root', 'pass', 'mydb'); 

Видя, как этот вопрос, кажется, довольно популярны и многие люди хотели бы знать WHY this is happening:

Это вызвано тем, что клиент MySQL выполнит поиск IPV6 для имени хоста. Если это не сработает (и в этом случае, очевидно, делает), он затем попытается выполнить поиск по IPV4. Между IPv6 (AAAA) сбой поиска и последующим поиском IPV4 (A) получается то, что мы получаем - это цикл тайм-аута соединения, который длится около 1-2 секунд.

Стоит отметить, что эта проблема возникает только с Windows 7 и после. До Windows 7, разрешение локальный был обработан файл хостов, вступившего предварительно сконфигурированные с 127.0.0.1

+0

Вау, спасибо. это точно в 100 раз быстрее o_O – Crayl

+0

тоже здесь - но ПОЧЕМУ? это очень важно! – rmirabelle

+0

@rmirabelle Word это как-то связано с тем, как mysqli обрабатывает localhost и IPv6. –

3

Как suggested by Tony:

Я редактировал my.ini Mysql, чтобы изменить службу MySQL только связываются с адаптер петли IPV4.

[mysqld] 
... 
bind=127.0.0.1 
1

Другой вариант заключается в редактировании файла хостов, найденные под окнами \ system32 \ Drivers \ Etc

# localhost name resolution is handled within DNS itself. 
    127.0.0.1  localhost 
# ::1    localhost 

Используйте редактор с правами администратора раскомментировать 127.0.0.1.

+0

Это лучший ответ, потому что более предпочтительным является устранение основной причины проблемы вместо использования IP-эквивалента localhost. Каждая машина должна знать, что localhost сам. –

Смежные вопросы