[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Оптимизировать MySQL запрос?
ArtmirArt
Здравствуйте. Как можно оптимизировать такой MySQL-запрос?

SELECT U.id,U.name,U.birthday,U.sex,U.city,U.status,U.regdate
FROM users U
LEFT JOIN shipping SA ON SA.user_id=U.id
LEFT JOIN activity A ON A.user_id=U.id
LEFT JOIN blocked B ON B.user_id=U.id
LEFT JOIN deleted D ON D.user_id=U.id
WHERE SA.id and A.last_activity_at > 1553260577 and B.id is NULL and D.id is NULL and
U.id NOT IN (
(
SELECT who_id FROM blacklist WHERE user_id=17 )
UNION
( SELECT user_id FROM blacklist WHERE who_id=17 )
UNION
( SELECT 17 )
)

GROUP BY U.id ORDER BY U.id DESC LIMIT 1 OFFSET 3
Эли4ка
А с этим что не так?
Kusss
ArtmirArt
Индексами на `user_id`
А так нужно смотреть EXPLAIN запроса.

Не совсем понятно, зачем отдельно таблицы для блокировки и удаления.

P.S. Можно ещё красиво сделать :)
SELECT 
U.id, U.name, U.birthday, U.sex, U.city, U.status, U.regdate
FROM
`users` U
INNER JOIN
`shipping` SA ON SA.user_id = U.id
INNER JOIN
`activity` A ON
A.user_id = U.id and
A.last_activity_at > 1553260577
LEFT JOIN
`blocked` B ON B.user_id = U.id
LEFT JOIN
`deleted` D ON D.user_id = U.id
WHERE
B.id is NULL and
D.id is NULL and
U.id NOT IN (
(
SELECT who_id FROM `blacklist` WHERE user_id = 17 )
UNION
( SELECT user_id FROM `blacklist` WHERE who_id = 17 )
UNION
( SELECT 17 )
)

GROUP BY
U.id
ORDER BY
U.id DESC
LIMIT

1
OFFSET
3
TMake
ArtmirArt не используй подзапрос в условии, лучше собери агрегированные данные и сделай join.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.