![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 173 Pomógł: 0 Dołączył: 13.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Wykonuję w obrocie pętli wiele przeróżnych operacji. Przy działaniu na powiedzmy 1000 rekordów dość szybko zostaje wszystko przetworzone, problem zaczyna się, gdy tych rekordów mam koło 20000. Całość wykonuje się bardzo wolno.
Chciałbym zapytać, z czego korzystać, by móc przyspieszyć wykonywanie całości. 1. Do łączenia z bazą wykorzystuję mysql. Zapytanie służy tylko do tego, by pozyskać rekordy z bazy, a następnie je usunąć. Czy jeśli wykorzystam mysqli to znacząco te operacje na bazie przyspieszą? Rozumiem, że mysql jest stare i nie powinno się go używać, jednak skrypt został napisany lata temu, gdy nie było jeszcze mysqli dlatego czy warto jest mi go przepisywać? Podkreślam, że nie zależy mi na bezpieczeństwie etc. Tylko i wyłącznie szybkość wykonywania. Do pozyskania tych danych w pętli używam:
Czy mysql_fetch_assoc jest dobrze wydajne? Czy skorzystać z innej funkcji, jak mysql_fetch_row czy w ogóle rzeczywiście skorzystać z mysqli? 2. Do sprawdzenia, czy istnieje konkretny ciąg znaków wykorzystuję preg_match. Czy przy użyciu innej funkcji, jak np. strstr czy strpos proces sprawdzenia danych będzie szybszy? 3. Wykonuję też dzielenie po znaku spacji: Czy istnieje inna funkcja, która podzieli mi tak dane i przedstawi w formie tablicy, która jednocześnie będzie szybsza niż explode? 4. Wykorzystuję preg_match_all do wyrażeń regularnych, np.: Czy jest inna funkcja, która będzie działać podobnie, ale szybciej? Podkreślam jeszcze raz, że chodzi tylko i wyłącznie o prędkość wykonywania tych operacji, czyli jednocześnie o zmniejszenie zużycia procesora itd. Kwestie bezpieczeństwa, większych możliwości itd. nie są istotne. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 520 Pomógł: 102 Dołączył: 15.07.2014 Skąd: NULL Ostrzeżenie: (0%) ![]() ![]() |
Jak wyżej +
Jeśli wielkość liter jest obojętna użyj strpos zamiast stripos, jest szybsze bo nie porównuje wielkości liter. Poczytaj o PSR żeby łatwiej się czytało twój kod. count + for bym zamienił na pętlę foreach. Jak gdzieś modyfikujesz 1 rekord lub kasujesz dodaj na końcu zapytania "LIMIT 1" przez co MySQL nie będzie skanował całej tabeli w poszukiwaniu kolejnych rekordów spełniających warunek. Inne mniejsze zmiany: Ogranicz ilość operacji wpływających na procesor, np. Zamiast:
Zrób: $ctt = $ctt."\n"; To można skrócić: $ctt .= "\n"; -- Swoją drogą nowsze rozszerzenie mysqli jest szybsze od mysql - które zostało skasowane w PHP7. Ten post edytował KsaR 15.08.2016, 22:53:56 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 21:19 |