![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 49 Dołączył: 12.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam skrypt, który przetwarza tabelę i zapisuje ją do bazy danych.
Oto kod: https://github.com/marcinlawnik/DziennikLog...rToDatabase.php Przetwarzanie odbywa się w pętli, chciałbym je zoptymalizować. Przyszły mi do głowy transakcje. Wystarczy wstawić na początku skryptu. Sam sobie odpowiedziałem. Drugie pytanie nadal pozostaje w mocy. 2. Czy są jeszcze inne sposoby na zoptymalizowanie tego zapytania? Pozdrawiam, mlawnik Ten post edytował mlawnik 22.06.2013, 18:55:57 -------------------- Pozdrawiam,
mlawnik Cytat(nospor) Jedzmy gówno.... miliony much nie może się przecież mylić |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 273 Pomógł: 52 Dołączył: 3.02.2013 Skąd: Przemyśl Ostrzeżenie: (0%) ![]() ![]() |
Nie zaleca się tworzenia jednej dużej transakcji, aby podczas jej trwania tworzyło i zmieniało się milion różnych rzeczy
Takie podejście jest bardzo błędne, a skoro powiedziałeś, że umieściłeś BEGIN na początku skryptu to zapewne taka WIELKA transakcja ma u ciebie miejsce Transakcja to coś pojedynczego i szybkiego. Wyobraź sobie transakcję finansową (pobieramy pieniądze z jednego konta i przekazujemy je do konta drugiego) Te dwa zapytania tworzą jedną transakcję - zarówno dosłownie jak i pod względem programistycznym Poza tym obawiam się, że transakcja z optymalizacją ma mało wspólnego Ten post edytował mstraczkowski 23.06.2013, 02:46:43 -------------------- Jeżeli moja wypowiedź Ci pomogła użyj przycisku
![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 49 Dołączył: 12.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- Pozdrawiam,
mlawnik Cytat(nospor) Jedzmy gówno.... miliony much nie może się przecież mylić |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Zapytania możesz przygotować ($pdo->prepare) raz, przed pętlą, i używać ich później wielokrotnie w pętli.
2. Powinieneś najpierw spróbować pobrać za jednym zamachem wszystkie ID przedmiotów na podstawie ich nazw. Dopiero w następnym kroku utworzyć nowe rekordy w bazie dla nieistniejących jeszcze przedmiotów. 3. Wydaje mi się, że wielokrotnie wyszukujesz niemal tych samych danych w HTML-u. Cytat Poza tym obawiam się, że transakcja z optymalizacją ma mało wspólnego Jednym ze skutków ubocznych wykorzystania transakcji jest przebudowanie indeksów dopiero po jej zakończeniu, a nie po każdym zapytaniu - to potrafi dać ogromnego kopa przy dużej liczbie zapytań INSERT.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 49 Dołączył: 12.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
@crozin
Dzięki za opinię, 1 i 2 wprowadzę w życie. Natomiast co miałeś na myśli w podpunkcie trzecim? -------------------- Pozdrawiam,
mlawnik Cytat(nospor) Jedzmy gówno.... miliony much nie może się przecież mylić |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Natomiast co miałeś na myśli w podpunkcie trzecim? Za każdym razem gdy pobierasz coś z HTML-a, czy raczej już drzewa DOM wykonujesz dosyć kosztowne wyszukiwanie po całym dokumencie. Przykładowo w linii #74 wykonujesz wewnątrz podwójnej pętli coś takiego:Każdorazowo wykonując względnie rozbudowane wyszukiwanie w dużym dokumencie. A można przecież zrobić coś w stylu: Nagle zamiast $i * $x wyszukiwań w rozbudowanym dokumencie masz jedno. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 455 Pomógł: 49 Dołączył: 12.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za wytłumaczenie, postaram się przepisać tą funkcje tak jak mówisz, zrobię benchmarka i dam do oceny jeszcze raz.
Czy ktoś ma inne sugestie? Pozdrawiam, mlawnik PS Przymuliłem ostro komputer: Ten post edytował mlawnik 23.07.2013, 11:42:33 -------------------- Pozdrawiam,
mlawnik Cytat(nospor) Jedzmy gówno.... miliony much nie może się przecież mylić |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 08:32 |