Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak przyspieszyc bo przy bazie 40 000 kazda seta secudy sie liczy
xavierek
post
Post #1





Grupa: Zarejestrowani
Postów: 92
Pomógł: 2
Dołączył: 22.03.2009

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


  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 ?
Powód edycji: [erix] przeniosłem
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A indeksy w bazie posiadasz? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post
pyro
post
Post #3





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Dałeś indeksy do odpowiednich kolumn?

Co to ma związanego z programowaniem obiektowym?
Go to the top of the page
+Quote Post
xavierek
post
Post #4





Grupa: Zarejestrowani
Postów: 92
Pomógł: 2
Dołączył: 22.03.2009

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


Tak mam klucze porobione chodzi mi o sam kod czy moze obiektowo bylo by szybciej ?
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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

Ten post edytował phpion 23.03.2009, 00:29:05
Go to the top of the page
+Quote Post
Crozin
post
Post #6





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

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


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 ( .... )
?
Go to the top of the page
+Quote Post
maly_swd
post
Post #7





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


poczytaj o http://dev.mysql.com/doc/refman/5.0/en/replace.html z tego co wyczytalem z Twojego kodu to jest bardziej opytmalne
Go to the top of the page
+Quote Post
xavierek
post
Post #8





Grupa: Zarejestrowani
Postów: 92
Pomógł: 2
Dołączył: 22.03.2009

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) licznik ile osób jest online to bym wziol z tabelki online ilsoc wierszy ;s
Go to the top of the page
+Quote Post
Bart77
post
Post #9





Grupa: Zarejestrowani
Postów: 31
Pomógł: 3
Dołączył: 24.03.2009
Skąd: Poznań

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował Bart77 25.03.2009, 16:03:18
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Możesz znacznie to przyśpieszyć tworząc funkcję w bazie i wykonując tą funkcję.

Pozdrawiam,
Łukasz
Go to the top of the page
+Quote Post
Bart77
post
Post #12





Grupa: Zarejestrowani
Postów: 31
Pomógł: 3
Dołączył: 24.03.2009
Skąd: Poznań

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


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


Dzięki za uwagę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Poprawiłem.
Go to the top of the page
+Quote Post

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: 15.09.2025 - 20:35