Valentin
Новичок
Запрос с LEFT JOIN
Оооооооооооочень много времени занимает. Секунд 7-13.
Смысл в том, чтобы выбрать всех клиентов cl, у которых есть ненулевой users_id (куратор клиента u) с указанием фамилии куратора, даты последнего контакта MAX(ca.`date`), если она сть, а если нет, то выводится пустое значение, т.к. LEFT JOIN.
cl - клиенты, u - кураторы, ca - контакты кураторов с клиентами
SELECT
cl.clients_id, cl.company_name,
u.surname ,
MAX(ca.`date`) as `date`
FROM
(
clients cl LEFT JOIN calls ca ON (cl.clients_id = ca.clients_id)
)
LEFT JOIN users u ON (cl.users_id = u.users_id)
WHERE
(cl.users_id IS NOT NULL) AND (cl.users_id <> '')
GROUP BY cl.clients_id ORDER BY cl.company_name
Дело в том, что клиентов 30 000, и контактов уже 1 тысяча с лишним...
Если делать выборку клиентов, у которых есть кураторы, без получения контактов, то всё идёт быстро - 5409 клиентов, а если с контактами, то тоже 5409, но очень медленно.
LEFT JOIN users u ON (cl.users_id = u.users_id) - для того, что ещё есть поиск всех-всех клиентов (и с кураторами, и без них), поэтому я его в WHERE не убрал.
Как оптимизировать этот запрос, чтобы он шёл быстро. Что тут не так?
Оооооооооооочень много времени занимает. Секунд 7-13.
Смысл в том, чтобы выбрать всех клиентов cl, у которых есть ненулевой users_id (куратор клиента u) с указанием фамилии куратора, даты последнего контакта MAX(ca.`date`), если она сть, а если нет, то выводится пустое значение, т.к. LEFT JOIN.
cl - клиенты, u - кураторы, ca - контакты кураторов с клиентами
SELECT
cl.clients_id, cl.company_name,
u.surname ,
MAX(ca.`date`) as `date`
FROM
(
clients cl LEFT JOIN calls ca ON (cl.clients_id = ca.clients_id)
)
LEFT JOIN users u ON (cl.users_id = u.users_id)
WHERE
(cl.users_id IS NOT NULL) AND (cl.users_id <> '')
GROUP BY cl.clients_id ORDER BY cl.company_name
Дело в том, что клиентов 30 000, и контактов уже 1 тысяча с лишним...
Если делать выборку клиентов, у которых есть кураторы, без получения контактов, то всё идёт быстро - 5409 клиентов, а если с контактами, то тоже 5409, но очень медленно.
LEFT JOIN users u ON (cl.users_id = u.users_id) - для того, что ещё есть поиск всех-всех клиентов (и с кураторами, и без них), поэтому я его в WHERE не убрал.
Как оптимизировать этот запрос, чтобы он шёл быстро. Что тут не так?