SimonSmith
Мастер
- Регистрация
- 25 Сен 2008
- Сообщения
- 148
- Реакции
- 34
- Автор темы
- #1
День добрый, столкнулся с большим временим отклика при обработке мульти JOIN's.
Есть 3 таблицы
about (~4,743 rows), delivery (~4,766 rows), pay (~5,877 rows)
Делая первый селект в phpmyadmin
результат: Showing rows 0 - 19 ( 20 total, Query took 0.0094 sec)
далее, подключаю еще 1 таблицу
результат: Showing rows 0 - 19 ( 20 total, Query took 28.9111 sec)
Время операции занимает огого сколько времени... Ок, пробую костыль:
результат: 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 и все летает
Есть 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
далее, подключаю еще 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
Время операции занимает огого сколько времени... Ок, пробую костыль:
Код:
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
Но, тут проблема, ловим: "Subquery returns more than 1 row". Limit не устраивает.
Использую LEFT JOIN т.к. нуждаюсь в нулл результатах из 3ей таблицы (pay). Вопрос: как уменьшить время обработки запроса с 3мя таблицами? Что со 2ым запросом не так?
UPD:
Решил проблему. Произошло чудо, таблица pay, имеет поле subscribe_idno, кодировка поля стояла latin1_swedish_ci. При любых запросах к этой базе все обрабатывалось медленно. Решил сменить кодировку на utf8_general_ci и все летает