Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] ograniczenia w multi insert
--marcin--
post
Post #1





Goście







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)
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Crozin 29.04.2014, 09:28:14
Go to the top of the page
+Quote Post
-Gość-
post
Post #3





Goście







Ile zatem jest optymalnie i bezpiecznie?
Go to the top of the page
+Quote Post
-Gość-
post
Post #4





Goście







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. }
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Crozin 29.04.2014, 10:13:35
Go to the top of the page
+Quote Post
-Gość-
post
Post #6





Goście







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ć.
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:09