Czy da się bardziej efektywnie wykonać zapytanie?

0

Witam mam takie poniższe zapytanie które pobiera statusy zalogowanego użytkownika a także ludzi których obserwuje zalogowany użytkownik. Problemem jest to , że gdy nie biorę podzapytań tylko wpisuje np. u.name co ma pokazać imię , to przy poście obserwowanej osoby pokazuje imię zalogowanego użytkownika. Da się inaczej napisać to zapytanie bo wykonuje się zbyt długo :) Za wszelkie sugestie z góry dziękuje.

SELECT `ms`.`id_status` , `status_body` , `ms`.`user_id`, `fav`.`id_favourites` ,
            `fav`.`item_id`, 
            ( SELECT `name` FROM `users` WHERE `id_user`=`ms`.`user_id` ) AS `name`,
            ( SELECT `surname` FROM `users` WHERE `id_user`=`ms`.`user_id`) AS `surname`,
            ( SELECT `login` FROM `users` WHERE `id_user`=`ms`.`user_id`) AS `login`

            
                FROM `users` AS `u`
                LEFT JOIN `observe` AS `ob`
                       ON `u`.`id_user` = `ob`.`user_id`
                LEFT JOIN `statuses` AS `ms`
                       ON `ms`.`user_id` = `u`.`id_user` OR  ( `ms`.`user_id` = `ob`.`followed_id` AND `ob`.`type` = 1 )
                   LEFT JOIN `favourites` AS `fav`
                      ON `fav`.`item_id`=`ms`.`id_status` AND `fav`.`user_id`=10 AND `fav`.`type`=1
                WHERE `u`.`id_user` = 10 GROUP BY `ms`.`id_status`    ORDER BY `ms`.`id_status` DESC LIMIT 5  
1

Podłącz drugi raz tę tabelę - JOIN users u1 ON ms.user_id=u1.id_user

1

KTÓRA BAZA DANYCH?
indeksy właściwe porobione są?

0

przede wszystkim pokaż execution plan

0

Indeksy jeszcze muszę pomyśleć ponieważ nie wiem czy do końca rozsądne będzie aby w tabeli o takiej strukturze

id_observe user_id followed_id
id identyfikator zalogowanego usera id gościa którego chcemy obserwować

pominąłem datę itp :) Ale myślę , że tutaj mógłbym ustawić dla tych 3 pól chociaż nie wiem czy to będzie rozsądne.

Dla tabeli statuses mam ustawiony indeks dla identyfikatora i klucz obcy dla user_id . Nie wiem co jeszcze można wycisnąć z tego :)


Przy małej ilości wpisów użytkownika który jest zalogowany i tego co obserwujemy to jeszcze jakoś działą ale przy dużej ilości wpisów to już masakra.

0

zacznij czytać to, co piszemy, to będziesz wiedzieć gdzie jest problem!!!
zobacz plan wykonania (jeśli to mssql, to sprawdź czy baza sugeruje założenie jakichś indeksów) i zobacz, która część zapytania wykonuje się najdłużej i z jakiego powodu. na 100% brakuje Ci właściwych indeksów.

0

I co to w ogóle jest "optymalniej"? Takiego słowa nawet w słowniku nie ma. Myślałem, że Coyote jakoś automatycznie poprawia błędy...

1 użytkowników online, w tym zalogowanych: 0, gości: 1