![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) ![]() ![]() |
Cześc - mam takie zapytanie:
Nic wielce podniecającego - liczenie średniej. Średnia liczy się w zależności od pola DR.rodzaj wg różnych pól (czasmi się odejmuje rabaty, czasasmi nie - w zależnosci od DR.rodzaj). Złączeń jest kilka - od cennika, po pozycje w cenniku, w zależności od klienta oraz produktu. Wykonuje te zapytanie około 100 razy gdzie zmienia się pole id_klient oraz P.id
Problem w tym, że za pierwsyzm razem te zapytanie (z takimi parametrami jak wyżej) wykonuje się 3,5 sekundy (co przy 100 daje czas około 5-6min), a po ponownym uruchomieniu (np. po minucie) - z tymi samimi parametrami - już tylko 0,001s (IMG:style_emoticons/default/sad.gif) Nie wiem co zoptymalizować - indeksy są, nie jest to coś skomplikowanego. Może te IFy w AVG? Tylko jak je obejść? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze spróbuj się pozbyć LEFT JOINów - wydaje mi się, że nic nie zmienią.
Po drugie sprawdź z jakich indeksów MOŻESZ skorzystać i te pola daj do WHERE. Resztę staraj się filtrować w samej formule. Albo dorób indeksy. Oczywiście sprawdź EXPLAINem. Aha, a różnice w czasach wynikają z tego, że za drugim razem bierze z CACHE,. Ten post edytował mmmmmmm 24.09.2014, 11:45:52 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
Cytat Po pierwsze spróbuj się pozbyć LEFT JOINów - wydaje mi się, że nic nie zmienią. Zmieniają - musze mieć takie dane w WHERE:
niestety nie mogę się ich pozbyć Cytat Po drugie sprawdź z jakich indeksów MOŻESZ skorzystać i te pola daj do WHERE. Mam indeksy i dokładnie z tych co korzystam w WHERE. Tabela DRP ma 2mln rekordów, inne po kilknaście tysięcy. Gdyby nie indkesy nie trwałoby to 3s (IMG:style_emoticons/default/sad.gif) Cytat Oczywiście sprawdź EXPLAINem. Zrobiłem - wskazało tylko, że poprawnie używam indeksów Cytat Aha, a różnice w czasach wynikają z tego, że za drugim razem bierze z CACHE,. Używając SELECT MYSQL_NO_CASHE identyczna sytuacja - za pierwszym razem 3sekundy, za kolejnymi 0,001 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Pisząc, żebyś pozbył się LEFT JOINów miałem na m,yśli zastąpienie je JOINami.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zrób dwie rzeczy. Po pierwsze zobacz jak długo wykonuje się zapytanie:
Po drugie zobacz co zwróci:
Explain pokaże Ci brakujące indeksy i inne problemy z Twoim zapytaniem. A co do tego, że drugie wykonanie zapytania trwa znacznie Ten post edytował sowiq 24.09.2014, 15:21:15 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.09.2025 - 09:04 |