![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Chciałbym się poradzić w następującej kwestii jakościowo/efektywnej:
mam tablice w php zawierająca 400 pozycji (klucz=>wartosc), pętlą foreach przelatuje po tych pozycjach i przy każdej robię jeden INSERT do bazy, wersja 1: pobieram id powstałego rekordu i na jego podstawie robie w osobnej tabeli 20 innych INSERTów. (pytania do bazy są małe ale jest ich dużo - 20 przy każdej iteracji) = 400 zapytań wersja 2: pobieram id powstałego rekordu i na jego podstawie składam jedno zapytanie INSERT do bazy. (pytanie jest wprawdzie jedno, ale duże i za jednym razem wrzuca 20 pozycji) = 40 zapytań Biorąc pod uwage, że dane do każdego wariantu to okolo 8 kolumn z INTami lub VARCHARami - czy lepiej zadawać bazie MySQL dużo małych czy mniej ale większych pytań ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 319 Pomógł: 118 Dołączył: 26.11.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
to, że wyślesz jedno polecenie, w którym jest 400 zapytań, zrobi nie wielką różnicę, bo zapytań dalej jest tyle samo. Jeśli to nie jest jakiś developerski skrypt, to raczej musisz przemyśleć logikę tej aplikacji
Ten post edytował Daimos 21.05.2015, 12:06:34 -------------------- scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Chyba źle napisalem. Może bardzo uproszczę moj problem:
wariant 1:
wariant 2:
Tak czy owak musze zrobić takie zapytanie - pytanie czy lepiej składać jedno duże zapytanie czy wysyłać kilkanaście mniejszych ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 27 Dołączył: 19.10.2014 Ostrzeżenie: (0%) ![]() ![]() |
Chyba źle napisalem. Może bardzo uproszczę moj problem: wariant 1:
wariant 2:
Tak czy owak musze zrobić takie zapytanie - pytanie czy lepiej składać jedno duże zapytanie czy wysyłać kilkanaście mniejszych ![]() Oczywiscie lepiej wybrac wariant ktory ma mniejsze zapytanie, bazie o wiele latwiej znalesc informacje. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 518 Pomógł: 18 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
napisałeś "znaleźć" - nawet jesli zapytanie jest typu insert ?
Ten post edytował elmozaur 21.05.2015, 13:41:37 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 27 Dołączył: 19.10.2014 Ostrzeżenie: (0%) ![]() ![]() |
napisałeś "znaleźć" - nawet jesli zapytanie jest typu insert ? Nie, insert dodaje, nie sprawdza rekordow, wiec wiadomo ze nie uzywa zbyt duzej mocy do tej operacji. Duze zapytania mozesz uzywac ale nie jak masz po pare tysiecy rekordow, im wiecej rekordow tym dluzej trwa filtracja. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Kiedyś zdaje się pytałem o coś podobnego. Nie ma jednoznacznej odpowiedzi. To jest kwestia optymalizacyjna, trzeba przetestować. Ale u mnie różnice były pomijalne, i bardziej opłacało się zachować czytelność zapytań, niż brnąć w jedno czy kilka wielkich.
Tak na marginesie dodam, że samo zapytanie z pytajnikami czy zmiennymi oraz prepare() robimy przed pętlą, a w samej pętli już tylko bindujemy dane i wykonujemy zapytanie:
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 12:40 |