![]() |
![]() |
![]() ![]()
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. -------------------- Prywatna koncepcja pasji - SprawdzAuto.info
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ja się wcale nie dziwie że zamula...
Pokaż strukturę tabelek i jakies przykładowe dane bo mam wrażenie że to wszystko da się uprościć |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 208 Pomógł: 3 Dołączył: 13.07.2009 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
Zgodnie z wnioskiem podaję strukturę (nazwa_tabeli: kolumny) i w nawiasach przykładowe wartości:
Na marginesie, czas trwania 1 godzina 1 minuta 3 sekundy (wynik 429.853). Ten post edytował d0m1n1k_ 20.01.2016, 14:48:17 -------------------- Prywatna koncepcja pasji - SprawdzAuto.info
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
a nie mogłeś dać po prostu dump SQL z BD? Tak to przynajmniej można sobie zaimportować tabele...
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 208 Pomógł: 3 Dołączył: 13.07.2009 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
Zrzut db? Pełnej? 15mln wpisów to blisko 7.5GB plik ;-)
-------------------- Prywatna koncepcja pasji - SprawdzAuto.info
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
1. Czy masz poprawnie założone indeksy na kolumnach, po których szukasz? 2. Na jakim silniku stoją te tabele - MyISAM, InnoDB czy coś innego? 3. Na razie olej ORDER BY, i sprawdź za pomocą EXPLAIN co (poza LIKE) zamula zapytanie |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Co tam 7,5GB
![]() ![]() Nie nie całą, schema i jakiegoś screena albo po 100 rekordów z każdej wymaganej. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 208 Pomógł: 3 Dołączył: 13.07.2009 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
1. Czy masz poprawnie założone indeksy na kolumnach, po których szukasz? 2. Na jakim silniku stoją te tabele - MyISAM, InnoDB czy coś innego? 3. Na razie olej ORDER BY, i sprawdź za pomocą EXPLAIN co (poza LIKE) zamula zapytanie 1. Yyy... tak(?) mi się wydaje. Całość prawidłowo funkcjonuje, jedynie pętla którą tu opisujemy długo (baaardzo długo - >1h) się wykonuje. 2. MariaDB 3. Co to da? Możesz rozwinąć myśl? Co tam 7,5GB ![]() ![]() Nie nie całą, schema i jakiegoś screena albo po 100 rekordów z każdej wymaganej. Dla mnie 7.5GB jest caałkiem pracochłonną wielkością. 100GB - chylę czoła i współczuję. Do godzinki czasu wrzucę po 50 wpisów dla każdej z tabel. Link do zrzutów tabelek db: mini_zrzut.rar -------------------- Prywatna koncepcja pasji - SprawdzAuto.info
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Huhh
![]() 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) |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:19 |