![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 6 Dołączył: 28.10.2009 Skąd: że znowu... Ostrzeżenie: (0%) ![]() ![]() |
Mam pewien problem z zapytaniem, które strasznie zamula mi stronę.
Na stronie chcę pobrać Wszystkie obrazki z bazy danych które zostały polubione powyżej 3 razy. Moje zapytanie wygląda tak: Kod SELECT * FROM obrazek WHERE id in (SELECT id_obrazek FROM loveit HAVING count(loveit.id) > 3 ) ORDER BY id desc LIMIT $ilosc Tabela obrazek - zawiera listę wszystkich obrazków pola w bazie id - nr id obrazka Tabela loveit - zawiera listę wszystkich osób które lubią obrazek pola w bazie id_obrazek - nr id obrazka Wiem że problem jest dokładnie tutaj Kod WHERE id in (SELECT id_obrazek FROM loveit HAVING count(loveit.id) > 3 ) Bo gdy usunę tę cześć działa bez problemu. Czy jest ktoś w stanie mi pomóc w jaki sposób mogę to zoptymalizować? Ten post edytował Natalka 15.05.2011, 14:08:14 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Załóż indeksy na : user_id ( w obu tabelkach ) , id_obrazek, datadodania i dodanydata (przy okazji powinnaś te dwa pola zmienić na int/timestamp/date/datetime, bo varchar jest tutaj nie na miejscu).
edit: Cytat A czy mógłby ktoś jeszcze podpowiedzieć co takiego źle robiłam? Czemu aż tak bardzo moje zapytanie zamulało stronę? Ponieważ dla każdego rekordu który pobierałaś odbywało się zapytanie
które przelatywało za każdym razem całą tabelkę loveit. I ogólnie IN'y + (sub)COUNTY są obciążające, dla tego jeżeli jest taka możliwość trzeba używać JOIN'ów które są o niebo szybsze. edit2: Dlaczego te pola są typu TEXT ? Nie wystarczyłby varchar(255/500) ? Cytat `tytul` text NOT NULL, `skad` text NOT NULL, `obrazek` text NOT NULL, `obrazekmini` text NOT NULL, `plikURL` text NOT NULL, Jeszcze a propo indeksów możesz założyć na pole typ. Ten post edytował melkorm 15.05.2011, 14:30:39 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 6 Dołączył: 28.10.2009 Skąd: że znowu... Ostrzeżenie: (0%) ![]() ![]() |
Załóż indeksy na : user_id ( w obu tabelkach ) , id_obrazek, datadodania i dodanydata (przy okazji powinnaś te dwa pola zmienić na int/timestamp/date/datetime, bo varchar jest tutaj nie na miejscu). Hmm.. Głupio mi przyznać bo nigdy nie stosowałam indeksów prócz dla id. O co w nich chodzi? Muszę ustawić nazwę klucza (czy ona ma jakiś związek z zapytaniem?) Czy indeksy przyśpieszają pobieranie danych? Mam też inny duży serwis w którym niestety nie korzystam z indeksów, mimo że działa sprawnie. A najwyższa pora zmienić swoje przyzwyczajenia i nauczyć się robić coś lepiej (IMG:style_emoticons/default/smile.gif) Bardzo dziękuje za pomoc, Pola TEXT już zmienione (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 06:40 |