SQL-запрос очень медленный в веб-приложении Kohana на сервере EasyPHP win7

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

Вот запрос SELECT:

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 установлен на 128 МБ, что может быть немного, но это не вызовет 25-секундной задержки.

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

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


person Gavin    schedule 26.09.2013    source источник
comment
Пробовали ли вы использовать профилировщик Kohana. Это, по крайней мере, определит, ищете ли вы в нужном месте. Также убедитесь, что вы правильно указали свои индексы в MySql, и изучите возможность включения журнал медленных запросов Mysql.   -  person Carl Groner    schedule 28.09.2013
comment
Я не знал о профилировщике! Это привело меня прямо к проблемному запросу, который на самом деле был выбором COUNT() сразу после выбора результатов поиска. Спасибо тебе за это. Это в основном ответило на мой вопрос, поэтому, если вы добавите это в ответ, я отмечу его как принятый.   -  person Gavin    schedule 28.09.2013


Ответы (2)


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

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

person DevWL    schedule 10.10.2013

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

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

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

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

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

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

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

person DevWL    schedule 29.10.2013