2013-09-26 2 views
1

У меня есть локальный веб-сервер EasyPHP с Apache, PHP и MySQL. До сих пор я работал с базой данных, в которой всего 500 записей. Иногда при запросе базы данных была бы большая задержка, может быть, около 10 секунд, прежде чем данные будут возвращены, но это было непротиворечиво. Возможно, каждый 10-й поиск пользователя произойдет. Сегодня я загрузил кучу тестовых данных в 6 таблиц. Каждая таблица теперь имеет около 15 000 записей. Теперь, просматривая пользователей, требуется, чтобы данные возвращались и выполнялись каждый раз около 25 секунд.SQL-запрос чрезвычайно медленный в веб-приложении Kohana на сервере win7 на EasyPHP

Вот ВЫБРАТЬ запрос:

SELECT SQL_CALC_FOUND_ROWS criteria.id, criteria.uid 
FROM user_profile 
INNER JOIN criteria ON (criteria.id = user_profile.cid) 
WHERE ((criteria.city = 250) 
    AND (user_profile.dob BETWEEN STR_TO_DATE('1978-09-27', '%Y-%m-%d') 
    AND STR_TO_DATE('1993-09-27', '%Y-%m-%d')) 
    AND (criteria.gender = 2) 
    AND (EXISTS(SELECT id FROM criteria_interests 
       WHERE cid = user_profile.cid AND value = 1) 
     OR EXISTS(SELECT id FROM criteria_interests 
       WHERE cid = user_profile.cid AND value = 2))) 
    AND (user_profile.uid != 2) 
LIMIT 0, 18 

Этот запрос занимает около 25 секунд, чтобы вернуть 202 результаты. Если я запустил этот запрос внутри phpMyAdmin, он загрузится мгновенно.

Я не уверен, где находится удержание. Я знаю, что SQL_CALC_FOUND_ROWS может привести к замедлению, но не 25 секунд, чтобы вернуть 202 строки. Что-то здесь не так.

Мне интересно, как я могу отследить проблему. Периодическая задержка, о которой я упоминал, произошла в основном, поскольку я установил EasyPHP, поэтому я подумал, что это проблема с EasyPHP. Но теперь, видя, насколько хуже проблема возникла с большим количеством записей базы данных, я подумал, что это проблема MySQL. Однако, когда я запускаю запрос внутри phpMyAdmin, это очень быстро. Итак, теперь я думаю, что это проблема с PHP.

Ограничение на память для PHP установлено на 128M, что может быть не очень много, но это не вызовет задержки на 25 секунд.

Кто-нибудь знает, как я могу решить эту проблему? Я не самый узнаваемый, когда речь идет о настройке Apache, PHP или MySQL, поэтому я не знаю, как это сделать.

Спасибо за любой совет.

+3

Вы попробовали [Профайлер Kohana] (http://kohanaframework.org/3.3/guide/kohana/profiling). Это, по крайней мере, определит, если вы смотрите в нужное место. Также убедитесь, что вы правильно указали свои индексы в MySql и изучите возможность включения [Mysql slow query log] (http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html). –

+0

Я не знал про профилировщик! Это привело меня прямо к проблемному запросу, который фактически был выбран COUNT() сразу после выбора результатов поиска. Спасибо вам за это. Это в основном отвечало на мой вопрос, поэтому, если вы положите это в ответ, я помечаю его как принятый. – Gavin

ответ

1

У меня была аналогичная проблема с загрузкой из базы данных. Он работает очень медленно в моей локальной среде EasyPHP. Однако, когда я загрузил его на сервер удаленного сервера, проблема уже исчезла. Поэтому, если ваш EasyPHP запускает ваше приложение медленно, не беспокойтесь слишком много, он будет работать нормально на реальном сервере.

Если вы действительно не можете справиться с этим отставанием, создайте локально вместо среды XAMPP. Ссылка на скачивание: http://www.apachefriends.org/en/xampp.html

0

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

http://www.wampserver.com/en/

Теперь вы, вероятно, сказать .. . «Эй, вы сказали, что исправили его, не меняйте сервер разработки»

И да! После того, как я установил WAMP сервер и после того, как я применил к нему выше конфигурации тузд показано на YouTube видео:

http://www.youtube.com/watch?v=8ob7Rvzobec&noredirect=1

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

Возможно, это также решит вашу проблему. Удачи! :)

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

  • Нет связанных вопросов^_^