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ć.