![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 12.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie.
Mam to "szczęście", że muszę po poprzednikach poprawić zapytania w sklepie internetowym. W znacznym stopniu baza danych zostaje obciążona czego efektem jest wydłużony czas ładowania się strony. Zapytania wyświetlające listę produktów w sklepie:
zapytanie zostaje wywołane dwa razy: 1 dla listy produktów, 2 (jak wywnioskowałem) dla paginacji (ilość stron produktów). Indexy założone na tabele (nazwa tabeli - pola indexow): zestawy - id_zest(pk), id_kat, zdj, symbol; zestawy_jezyki - id_zest_l(pk), id_zest, id_lang, nazwa, opis, ivona(nie uzywane juz w sklepie pole w bazie), ivona_url(jak w przypadku ivony) zestawy_cechy - id_cech_l(pk) & id_zest, id_cech_l(pk), id_zest, wartosc produkty - id_prod(pk), id_user, id_vat, id_produc, id_zest, id_rodz, data_add, idx_stan, detal produkty_jezyki - id_prod_l(pk), id_prod, id_lang kategorie_zestawy - id_kat_zest(pk), id_kat & id_zest kategorie - id_kat(pk), id_user, id_gr Wszystkie tabele to MyISAM. Jakie są wasze sugestie co do optymalizacji tego zapytania ? Ten post edytował Petre 3.01.2013, 10:16:50 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Tak jak Ci pisałem to istotne by owarunkowanie tabel wiązanych było właśnie w joinach (IMG:style_emoticons/default/smile.gif) W WHERE trzymaj tylko to co dotyczy tabeli tej "pierwszej" do której joinujesz.
Sprawdziłeś indeksy czy są tak jak Ci pisałem? (dla wszytskich pól z WHERE, ON, ORDER - w sumie GROUP BY też) Co do InnoDB... hmm na żywym organiźmie - tymbardziej sklepie bym tego nie robił raczej. Ogólnie najlepiej by było zatrzymać sklep, zrobić backup całej bazy, zrobić konwersje i przetestować. Ogólnie InnoDb jeśli nie poustawiasz kluczy obcych nie powinno nic popsuć na bazie która działała w MyISAM chyba że są tam używane zapytania typowe dla MyISAM jak wyciąganie statysyk tabel z tabeli systemowych - ale wątpie by ktoś na to wpadł patrząc na te zapytanka. O ile wzrosła wydajność po samej zmianie na JOINy i poprawieniu INDEKSÓW podaj jakieś liczby cokolwiek. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 12.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Tak jak Ci pisałem to istotne by owarunkowanie tabel wiązanych było właśnie w joinach (IMG:style_emoticons/default/smile.gif) W WHERE trzymaj tylko to co dotyczy tabeli tej "pierwszej" do której joinujesz. Sprawdziłeś indeksy czy są tak jak Ci pisałem? (dla wszytskich pól z WHERE, ON, ORDER - w sumie GROUP BY też) O ile wzrosła wydajność po samej zmianie na JOINy i poprawieniu INDEKSÓW podaj jakieś liczby cokolwiek. przerobiłem zapytanie do takiej postaci :
pozakładałem indexy na wszystkie z pól ON, WHERE, ORDER, GROUP BY Testuję na "żywym" sklepie. Wyniki : duration: od 5 - 11 s Kiedy warunki zostawiam w WHERE wówczas czas jest nieznacznie krótszy. Nie jest to jednoznaczne ponieważ ilość użytkowników w sklepie ciągle się zmienia więc i obciążenie serwera się waha. Jest jeszcze jakaś opcja przetestowania bardziej miarodajna ? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 14:00 |