![]() |
![]() |
![]()
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 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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 20:27 |