Czy da się bardziej efektywnie wykonać zapytanie?

Odpowiedz Nowy wątek
2011-10-09 18:51
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  
Nie ma czegoś takiego jak "optymalniej". Optymalnie oznacza najlepiej. - ElevenEleven 2011-10-10 22:15
poprawiłem temat - ŁF 2011-10-17 15:18

Pozostało 580 znaków

2011-10-09 19:40

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

zapytanie wykonuje się o 48% szybciej :)))) - zuck 2011-10-09 23:33

Pozostało 580 znaków

2011-10-09 20:50
ŁF
1

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


edytowany 2x, ostatnio: ŁF, 2011-10-17 12:00
"Group by" jest na jednym polu zamiast na wszystkich, w związku z tym stawiam na MySQL. - vpiotr 2011-10-17 10:55

Pozostało 580 znaków

2011-10-09 22:47
0

przede wszystkim pokaż execution plan


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-10-09 23:40
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.

edytowany 3x, ostatnio: zuck, 2011-10-10 00:37

Pozostało 580 znaków

2011-10-17 12:05
ŁF
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.


Pozostało 580 znaków

2011-10-17 12:56
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...


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
no, wszystkie - ŁF 2011-10-17 13:37
Nie napisałem, że wszystkie. Ale jakąś nową regułę chyba można dodać. - somekind 2011-10-17 14:20
można, ale taki błąd widzę tu pierwszy raz. automatyczne orty dodaję dla powtarzających się błędów. poza tym tytuły wątków nie są poprawiane. - ŁF 2011-10-17 15:17
A Google znajduje 89 użyć tego słowa na forum. ;) Nie chcę krytykować Waszej pracy, po prostu to słowo jest rażącym błędem, więc myślę, że powinno się je zacząć piętnować, żeby ludzie przestali go używać. Taka tam sugestia... - somekind 2011-10-17 15:27

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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