Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Dlaczego skrypy tak dziwnie dodaje do bazydanych
silverwind
post
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 8.02.2013

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


Ten skrypt nie chce mi dodać do tabeli 1000000. Są jakieś ograniczenia w Mysql. Jak dodaje 10000 to idzie jak drugi raz uruchomię to tak różnie dodaje. Znacie może jakoś funkcje co mierzy czas wykonywania skryptu




  1. <?php
  2. $stara_wartosc = ini_set ( 'max_execution_time', 0 );
  3. $con = mysqli_connect("localhost","root","","my_db");
  4. if($con)
  5. // Check connection
  6. if (mysqli_connect_errno())
  7. {
  8. echo "Failed to connect to MySQL: " . mysqli_connect_error();
  9. }
  10.  
  11. $query = "INSERT INTO osoby (`Imie`, `Nazwisko`,`Wiek`) VALUES ";
  12. for($i=0; $i<1000000; $i++)
  13. {
  14. $query .= "('imie', 'nazwisko', 'wiek')";
  15.  
  16.  
  17.  
  18. }
  19. //$query = substr($query, 0, -1); // na końcu nie może być przecinka więc go ucinam
  20. mysqli_query($con,$query);
  21.  
  22.  
  23. mysqli_close($con);
  24. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
aniolekx
post
Post #2





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


brakuje przecinka ~~ zgadnij gdzie wink.gif
Go to the top of the page
+Quote Post
Rysh
post
Post #3





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Nie możesz tego dodawać na części? Pozatym tak jak kolega wyżej pisze, brakuje Ci przecinka.


--------------------
Go to the top of the page
+Quote Post
silverwind
post
Post #4





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 8.02.2013

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


oki poprawiłem przycinek ale to nic nie zmienia dodaje przy 10000. może mi ktoś wytłumaczyć lub napisać jak to ma być. Che testować baszę danych i dodać np 1000000 rekordów .
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zamiast robic jedno zapytanie, ktore na raz dodaje milion rekordow, napisz milion zapytan ktore dodaje 1 rekord.
A jak masz fantazje, to dodawaj po 1000 rekordow w jednym zapytaniu


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
silverwind
post
Post #6





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 8.02.2013

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


Gdzie się w my.in ustawia czas wykonania skrytpu. Próbowałem bezpośrednio w mysql i podobny problem zacina się baza danych .

  1. DELIMITER #
  2. CREATE PROCEDURE A2()
  3.  
  4. BEGIN
  5. DECLARE a INT DEFAULT 1 ;
  6. simple_loop: LOOP
  7. INSERT INTO osoby (`Imie`, `Nazwisko`,`Wiek`) VALUES('imie', 'nazwisko', 'wiek');
  8. SET a=a+1;
  9. IF a=1000000 THEN
  10. LEAVE simple_loop;
  11. END IF;
  12. END LOOP simple_loop;
  13. END #


Ten post edytował silverwind 21.12.2014, 22:05:57
Go to the top of the page
+Quote Post
rad11
post
Post #7





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


Czas dzialania skryptu mozesz ustawic poprzez set_time_limit, ini_set lub besposrednio w php.ini na serwerze.
Go to the top of the page
+Quote Post
silverwind
post
Post #8





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 8.02.2013

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



Już rozwiązałem problem trzeba dodać $cfg['ExecTimeLimit'] = 0; w config.inc.php . Są jakieś funkcje co liczą czas wykonywanie skryptu np. wyświetla mi czas i mierzy jak długo się wykonuje.

Ten post edytował silverwind 22.12.2014, 13:43:00
Go to the top of the page
+Quote Post
grzes999
post
Post #9





Grupa: Zarejestrowani
Postów: 305
Pomógł: 29
Dołączył: 5.07.2011

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


Funkcji z tego co się oreintuję to nie ma. Są rózne narzędzie do tego, bądź możesz to robić w ten sposób

  1. $time_start = getmicrotime();
  2. //jakieś operacje
  3. $time_stop = getmicrotime();
  4.  
  5. echo 'Czas wczytywania pliku: ' . ($time_stop - $time_start);
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #10





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


http://dev.mysql.com/doc/refman/5.0/en/show-profile.html
Go to the top of the page
+Quote Post
silverwind
post
Post #11





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 8.02.2013

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


Zastanawiam mnie pewna różnica jak używam tego skryptu w php to czas wykonywanie jest 50 sekund a jak robię to z poziomu phpMyadmin zapytanie w sql to trwa to koło godziny może wiecie czemu tak jest .
  1. DELIMITER #
  2. CREATE PROCEDURE A()
  3.  
  4. BEGIN
  5. DECLARE a INT DEFAULT 1 ;
  6. simple_loop: LOOP
  7. INSERT INTO osoby (`Imie`, `Nazwisko`,`Wiek`) VALUES('imie', 'nazwisko', 'wiek');
  8. SET a=a+1;
  9. IF a=1000000 THEN
  10. LEAVE simple_loop;
  11. END IF;
  12. END LOOP simple_loop;
  13. END #

  1. CALL `A`()`




  1. <?php
  2. //$stara_wartosc = ini_set ( 'max_execution_time', 0 );
  3. //error_reporting(0);
  4. $con = mysqli_connect("localhost","root","","my_db");
  5. if($con)
  6. // Check connection
  7. if (mysqli_connect_errno())
  8. {
  9. echo "Failed to connect to MySQL: " . mysqli_connect_error();
  10. }
  11.  
  12. $stoper_start = time(true); // start pomiaru
  13.  
  14. //mierzony skrypt ////////////////////////
  15. usleep(10000);
  16. $query = "INSERT INTO osoby (`Imie`, `Nazwisko`,`Wiek`) VALUES ";
  17.  
  18.  
  19. for($i=0; $i<1000000; $i++)
  20. {
  21. $query .= "('imie', 'nazwisko', 'wiek'),";
  22.  
  23. }
  24.  
  25. $query = substr($query, 0, -1); // na końcu nie może być przecinka więc go ucinam
  26. mysqli_query($con,$query);
  27.  
  28. $stoper_stop = time(true); //koniec pomiaru
  29.  
  30. echo bcsub($stoper_stop, $stoper_start, 2); // wynik np 1.0123 sekundy
  31.  
  32.  
  33.  
  34.  
  35. mysqli_close($con);
  36. ?>


Ten post edytował silverwind 22.12.2014, 17:24:51
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Poniewaz za pierwszym razem wykonujesz milion krotkich zapytan a za drugim razem jedno długie. Wieksza libcza zapytan powoduje wydłużenie ich czasu wykonywania


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
silverwind
post
Post #13





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 8.02.2013

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


Trochę szukałem ale nie mogłem znaleźć innej pętli pod Mysql. Jak zrobić bezpośrednio pod mysql taką petle? Czy idzie w ogóle?
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #14





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Napisz co konkretnie chcesz zrobić. Nie wierzę że ma to być milion takich samych rekordów
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 - 10:06