MySQL query time

Статус
В этой теме нельзя размещать новые ответы.

SimonSmith

Мастер
Регистрация
25 Сен 2008
Сообщения
148
Реакции
34
День добрый, столкнулся с большим временим отклика при обработке мульти JOIN's.
Есть 3 таблицы
about (~4,743 rows), delivery (~4,766 rows), pay (~5,877 rows)

Делая первый селект в phpmyadmin
Код:
SELECT ja.*,
jd.subscribe_user, jd.subscribe_abon_count, jd.subscribe_type, jd.subscribe_adress_deliver, jd.subscribe_city, jd.subscribe_zip
FROM
         about as ja
LEFT JOIN
         delivery as jd
ON
          ja.subscribe_id = jd.subscribe_user
ORDER BY ja.subscribe_date desc
LIMIT 0,20
результат: Showing rows 0 - 19 ( 20 total, Query took 0.0094 sec)


далее, подключаю еще 1 таблицу
Код:
SELECT ja.*,
jd.subscribe_user, jd.subscribe_abon_count, jd.subscribe_type, jd.subscribe_adress_deliver, jd.subscribe_city, jd.subscribe_zip,
jp.pay_id, jp.subscribe_date as pay_date, jp.sum as pay_sum
FROM
         about as ja
LEFT JOIN
         delivery as jd
ON
         ja.subscribe_id = jd.subscribe_user
LEFT JOIN
         pay as jp                   
ON
         ja.subscribe_idno = jp.subscribe_idno
ORDER BY ja.subscribe_date desc
LIMIT 0,20
результат: Showing rows 0 - 19 ( 20 total, Query took 28.9111 sec)

Время операции занимает огого сколько времени... Ок, пробую костыль:

Код:
SELECT ja.*, jd.subscribe_user, jd.subscribe_abon_count, jd.subscribe_type, jd.subscribe_adress_deliver, jd.subscribe_city, jd.subscribe_zip,
(select jp.pay_id from pay as jp where ja.subscribe_idno=jp.subscribe_idno ) as pay_id,
(select jp.subscribe_date from pay as jp where ja.subscribe_idno=jp.subscribe_idno ) as pay_date,
(select jp.sum from pay as jp where ja.subscribe_idno=jp.subscribe_idno ) as pay_sum
FROM
         about as ja
LEFT JOIN
         delivery as jd
ON
         ja.subscribe_id = jd.subscribe_user
ORDER BY ja.subscribe_date desc
LIMIT 0,20
результат: Showing rows 0 - 19 ( 20 total, Query took 0.3365 sec)
Но, тут проблема, ловим: "Subquery returns more than 1 row". Limit не устраивает.

Использую LEFT JOIN т.к. нуждаюсь в нулл результатах из 3ей таблицы (pay). Вопрос: как уменьшить время обработки запроса с 3мя таблицами? Что со 2ым запросом не так?

UPD:
Решил проблему. Произошло чудо, таблица pay, имеет поле subscribe_idno, кодировка поля стояла latin1_swedish_ci. При любых запросах к этой базе все обрабатывалось медленно. Решил сменить кодировку на utf8_general_ci и все летает :confused:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху