Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak przyspieszyc bo przy bazie 40 000 kazda seta secudy sie liczy
Forum PHP.pl > Forum > Bazy danych
xavierek
  1. <?php
  2. $xxxxx = mysql_query("SELECT id_player, time FROM login WHERE id_player NOT IN (SELECT id_player FROM players_onlines)");
  3. while($rdd = mysql_fetch_array($xxxxx)) {
  4. $xa++;
  5. $id_player = $rdd['id_player'];
  6. $time = $rdd['time'];
  7. if($time<$id_online){
  8. $result122 = mysql_query("INSERT INTO `logs_player` (`id_player` ,`login` ,`logout`)VALUES ('$id_player', '$time', '$id_online')");
  9. $result2 = mysql_query ("DELETE FROM login WHERE id_player ='$id_player'");
  10. }
  11. ?>

Jak to przyspieszyć ma ktos jakies pomysly ?
erix
A indeksy w bazie posiadasz? snitch.gif
pyro
Dałeś indeksy do odpowiednich kolumn?

Co to ma związanego z programowaniem obiektowym?
xavierek
Tak mam klucze porobione chodzi mi o sam kod czy moze obiektowo bylo by szybciej ?
phpion
Cytat(xavierek @ 22.03.2009, 23:43:15 ) *
Tak mam klucze porobione chodzi mi o sam kod czy moze obiektowo bylo by szybciej ?

Obiektowo z założenia (zawsze?) będzie wolniej. Spróbuj wyeliminować zapytania wywoływane rekurencyjnie bo to pewnie one ci spowalniają.

PS: czy ten skrypt ma służyć jako licznik kto jest online? Jeżeli tak to gratuluję pomysłowości...
Crozin
A zamiast wykonywać zapytań nie mógłbyś sobie do jakiejś tablicy dopisywać jedynie danych by ostatecznie wykonać 2 zapytania:
  1. INSERT INTO ... VALUES
  2. (...),
  3. (...),
  4. (....);
  1. DELETE .... WHERE id IN ( .... )
?
maly_swd
poczytaj o http://dev.mysql.com/doc/refman/5.0/en/replace.html z tego co wyczytalem z Twojego kodu to jest bardziej opytmalne
xavierek
Cytat(phpion @ 23.03.2009, 00:27:19 ) *
Obiektowo z założenia (zawsze?) będzie wolniej. Spróbuj wyeliminować zapytania wywoływane rekurencyjnie bo to pewnie one ci spowalniają.

PS: czy ten skrypt ma służyć jako licznik kto jest online? Jeżeli tak to gratuluję pomysłowości...

nie to jest zęby spisać od kiedy do kiedy player był online winksmiley.jpg licznik ile osób jest online to bym wziol z tabelki online ilsoc wierszy ;s
Bart77
IMHO niepotrzebnie przepisujesz wartości z $rdd do kolejnych zmiennych, zamiast odwołać się poniżej do samego $rdd:

  1. <?php
  2. $xxxxx = mysql_query("SELECT id_player, time FROM login WHERE id_player NOT IN (SELECT id_player FROM players_onlines)");
  3. while($rdd = mysql_fetch_array($xxxxx)) {
  4. $xa++;
  5. if($rdd['time']<$id_online){
  6. $result122 = mysql_query("INSERT INTO `logs_player` (`id_player` ,`login` ,`logout`)VALUES ('{$rdd['id_player']}', '{$rdd['time']}', '$id_online')");
  7. $result2 = mysql_query ("DELETE FROM login WHERE id_player ='{$rdd['id_player']}'");
  8. }
  9. ?>



Zawsze to jakaś tam mikrosekunda winksmiley.jpg
dr_bonzo
@Bart77: zmieniles sens ostatniej linjki w swoim kodzie!

@xavierek:

  1. <?php
  2. $xxxxx = mysql_query("SELECT id_player, time FROM login WHERE id_player NOT IN (SELECT id_player FROM players_onlines)");
  3. while($rdd = mysql_fetch_array($xxxxx)) {
  4. $xa++;
  5. $id_player = $rdd['id_player'];
  6. $time = $rdd['time'];
  7. if($time<$id_online){
  8. $result122 = mysql_query("INSERT INTO `logs_player` (`id_player` ,`login` ,`logout`)VALUES ('$id_player', '$time', '$id_online')");
  9. $result2 = mysql_query ("DELETE FROM login WHERE id_player ='$id_player'");
  10. }
  11. ?>


mozesz uzyc:
  1. INSERT INTO logs_player (id_player, login, logout)
  2. SELECT login.id_player, login.time, $id_online FROM login WHERE login.id_player NOT IN (SELECT .... )

To ci zastapi tego selecta i milion insertow.

A delete tez z podzapytaniem.
Kocurro
Możesz znacznie to przyśpieszyć tworząc funkcję w bazie i wykonując tą funkcję.

Pozdrawiam,
Łukasz
Bart77
Cytat(dr_bonzo @ 24.03.2009, 16:04:45 ) *
@Bart77: zmieniles sens ostatniej linjki w swoim kodzie!


Dzięki za uwagę smile.gif Poprawiłem.
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.