Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] ograniczenia w multi insert
Forum PHP.pl > Forum > Przedszkole
-marcin-
Witam
Czy w zapytaniu mysql istnieje jakies ograniczenie co do liczby dodawanych wierszy w 1 zapytaniu lub ilosci znakow?

  1. INSERT INTO (id, val) VALUES (1,2),(2,3),(3,4)
Crozin
O ile dobrze kojarzę nie ma limitu ilości wierszy dodanych w ten sposób. Jest jednak limit długości samego zapytania, ograniczony przez dyrektywę max_allowed_packet.

Raczej nie szalałbym z ilością dodawanych jednocześnie rekordów.
Gość
Ile zatem jest optymalnie i bezpiecznie?
Gość
I czy takie rozwiazanie jest dobre, czy zrobiłbyś to inaczej/lepiej ?

  1. foreach(array_chunk($insert, 30) as $v) {
  2.  
  3. query( ' INSERT INTO tablica (id,val) VALUES '.implode(', ', $v) )
  4.  
  5. }
Crozin
Jeżeli masz dużą ilość rekordów do wrzucenia:

1. Przygotuj sobie zapytanie SQL - PDO::prepare().
2. Rozpocznij transakcję - PDO::beginTransaction()
3. Wywołaj X razy wyrażenie z punktu pierwszego.
4. Zatwierdź transakcję - PDO::commit()

PDO niestety nie obsługuje grupowych (ang. batch) operacji. Nie mniej jednak pow. sposób powinien być wystarczająco szybki, a na pewno bezpieczniejszy i wygodniejszy w użyciu niż sklejanie INSERTA-a z wieloma wierszami.
Gość
Dzięki w PDO tak to by wyglądało, niestety dostałem skrypt do przeróbki pomijający całkiem wszelkie zasady i korzystajacy z mysql_query i staram się go choć minimalnie zoptymalizować.
Crozin
Tutaj zaczynają się już kwestie indywidualnego dostosowania konf. bazy/połączenia, które w dodatku mogą być, i zapewne są, zależne od konkretnych wersji oprogramowania. W takim przypadku faktycznie powinieneś skorzystać z multiple inserts + transakcji (ręczne wywołanie zapytań START TRANSACTION i COMMIT). Ile dokładnie rekordów na raz wrzucać? Prawdopodobnie będziesz musiał zrobić sobie kilka testów i samodzielnie dojść do tego jaka ilość jest optymalna.

Przydatne linki:
1. http://stackoverflow.com/questions/7977172...ert-performance
2. https://www.google.pl/search?q=mysql+insert...ce&safe=off
3. https://dev.mysql.com/doc/refman/5.6/en/insert-speed.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.