![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 208 Pomógł: 3 Dołączył: 13.07.2009 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
Witam,
napisałem skrypt który ma za zadanie zliczenie ile jest przypisanych wpisów do pojazdów których nazwa docelowa lub nazwa tymczasowa jest zgodna ze wzorcem z tabeli stats_id. Wszystko działa zgodnie z założeniami, ale niestety działa bardzo wolno. Dla minimalizacji obciążenia serwera (poleasingowy sprzęt sprzed dekady zmonotwany na poddaszu) stosuję zapis do pliku i pętlę która uruchamiana jest raz dziennie. Ale nie zmienia to wszystko faktu, że zapytanie - a raczej pętla - wykonuje swoją pracę przez wiele minut. Wynika to z wielkości bazy danych - sumarycznie blisko 15 milionów wpisów we wszystkich tabelach. Poniżej skrypt o którym mowa:
Z góry dziękuję za każdą pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Huhh (IMG:style_emoticons/default/smile.gif)
po kolei: - Kod SELECT COUNT(*) AS wynik_aut FROM `vehicles` WHERE `vh_name` LIKE '%" . $qsi['si_showid'] . "%' OR `vh_temp` LIKE '%" . $qsi['si_showid'] . "%' Do tabeli `vechicles` trzeba dodać index. Nalepiej (vh_name, vh_temp) Zmieniłbym te Like na = czyli: Kod SELECT COUNT(*) AS wynik_aut FROM `vehicles` WHERE `vh_name` = '" . $qsi['si_showid'] . "' OR `vh_temp` = '" . $qsi['si_showid'] . "' Dlaczego? Ponieważ przy LIKE w takiej formie nie będą używane indeksy nawet jeśli będą założone. A to przez % na początku. Jeśli masz najnowszą wersję MySql to możesz założyć index FullText. Jeśli nie to zwykły indeks podwójny. (Ale Like i tak trzeba zmienić) - Dalej załóż indeksy w tabelach vh_engines (ve_si) i vh_bodytype (vb_si) To tak na bardzo szybko. Po południu jeszcze zerknę, ale dobrze by było te zapytania z pętli zlikwidować (a przynajmniej zredukować do 1) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 11:08 |