powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь с оптимизацией SQL запроса
12 сообщений из 12, страница 1 из 1
Нужна помощь с оптимизацией SQL запроса
    #40135962
askdfasdf111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как можно оптимизировать выполнение этого запроса,
он выводит список из таблицы с последними данными из таблицы коментов

авторselect
*
FROM
data c
left join data_status s on s.id = c.status
left join comments cc2 on cc2.objectid = c.id and cc2.id = (
select
com.id
from
comments com
where
com.objectid = c.id
order by
com.dat desc
limit 1
)
ORDER BY
s.name ASC
LIMIT
0, 50;
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40135996
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, кто так форматирует...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select *
FROM      data c
left join data_status s on s.id = c.status
left join comments cc2 on cc2.objectid = c.id 
                      and cc2.id = ( select com.id
                                     from comments com
                                     where com.objectid = c.id
                                     order by com.dat desc limit 1 
                                    )
ORDER BY s.name ASC LIMIT 0, 50;



Какая ТОЧНО версия MySQL?
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136034
askdfasdf111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
5.7.37-0ubuntu0.18.04.1-log
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136067
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT d1.*,
       ds1.*
FROM      data d1
LEFT JOIN data_status ds1 ON ds1.id = d1.status
LEFT JOIN (      comments c1
            JOIN ( SELECT c2.objectid, MAX(c2.dat) dat
                   FROM comments c1
                   GROUP BY c2.objectid 
                  ) c3 ON c3.objectid = c1.objectid
          ) ON c1.objectid = d1.id


Необходимо наличие индекса comments(objectid, dat) .

PS. Убедись, что в обоих случаях нужен именно LEFT JOIN. Может, хватит и INNER?
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136126
askdfasdf111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не получилось.

Кажется тут ошибка (c1):
FROM comments c1
GROUP BY c2.objectid

Если исправляем на c2, то множатся записи в join, в зависимости от количества комментариев, а должен быть только один последний
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136127
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
askdfasdf111
Кажется тут ошибка (c1):
FROM comments c1

Да, конечно. Алиас c2 .
askdfasdf111
множатся записи в join

DISTINCT
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136129
askdfasdf111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Без distinct есть возможность?
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136279
askdfasdf111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Any ideas? Получается мой вариант из первого поста самый оптимальный?
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136325
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запрос был офигенный, не докопаешься,
только надо знать индексы на таблице, чтобы что то оптимизировать,
скорее всего индексов нужных не хватает
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136330
askdfasdf111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, будем играть с индексами
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136333
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
askdfasdf111
Получается мой вариант из первого поста самый оптимальный?

Не уверен.
Если конечный результат сортируется по полю из data_status, какой смысл прицеплять его левым джойном?
Ну, т.е.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT *
FROM  data c
JOIN data_status s ON s.id = c.status
LEFT JOIN comments cc2 ON com.objectid = c.id AND cc2.id = (
  SELECT com.id
  FROM comments com ON com.objectid = c.id
  ORDER BY com.dat DESC LIMIT 1 )
ORDER BY s.name ASC LIMIT 50
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией SQL запроса
    #40136424
askdfasdf111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paver
askdfasdf111
Получается мой вариант из первого поста самый оптимальный?

Не уверен.
Если конечный результат сортируется по полю из data_status, какой смысл прицеплять его левым джойном?
Ну, т.е.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT *
FROM  data c
JOIN data_status s ON s.id = c.status
LEFT JOIN comments cc2 ON com.objectid = c.id AND cc2.id = (
  SELECT com.id
  FROM comments com ON com.objectid = c.id
  ORDER BY com.dat DESC LIMIT 1 )
ORDER BY s.name ASC LIMIT 50



Поле Статус может быть не заполнено
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь с оптимизацией SQL запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]