Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Długo wykonujący się update
GalGavu
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 27.02.2010

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


Witam.
Mam dość spory problem z czasem wykonania zapytania.
Kod jest taki:
  1. <?php
  2. try{
  3. $pdo = new PDO('mysql:host=localhost;dbname=logs', 'root', '*******');
  4. echo 'Połączenie nawiązane!';
  5. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6.  
  7. $k=1;
  8. $zap = $pdo->query('SELECT agent FROM logs limit 100');
  9. foreach($zap as $row){
  10. $tab = preg_split("/\(/", $row['agent']);
  11. $tab1 = preg_split("/\//",$tab[0]);
  12. if(count($tab1) >= 2){
  13. $update='UPDATE logs SET browser=\''.$tab1[0].'\', browser_version=\''.$tab1[1].
  14. '\'WHERE id=\''.$k.'\'';
  15. $upd = $pdo->exec($update);
  16. }else {
  17. $update='UPDATE logs SET browser=\''.$tab1[0].'\', browser_version=\'-\'WHERE id=\''.$k.'\'';
  18. $upd = $pdo->exec($update);
  19. }
  20. $k++;
  21. }
  22. $zap->closeCursor();
  23. echo 'koniec';
  24. }
  25. catch(PDOException $e){
  26. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  27. }
  28.  
  29.  
  30. ?>


Generalnie są to logi serwera apache i pod agent znajduje się długi ciąg znaków na którego początku znajduje się przeglądarka i wersja, którą chce je wsadzić do osobnych kolumn. No i pojawia się problem bo 100 rekordów się robi ok. 9 sekund, a baza danych ma ich ponad 800 tys.
Czy jest jakaś możliwość przyspieszenia tego zapytania. id jest ustawiony jako klucz główny więc indeksów za bardzo nie widzę żeby wstawiać.

Ten post edytował GalGavu 14.04.2010, 20:02:43
Go to the top of the page
+Quote Post

Posty w temacie
- GalGavu   Długo wykonujący się update   14.04.2010, 16:23:35


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

 



RSS Aktualny czas: 22.08.2025 - 13:22