Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> optymalizacja pewnych zapytan
AcidBurnt
post
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 1
Dołączył: 13.04.2003
Skąd: z ławki przed blokiem

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


witam

nie za bardzo wiedzialem gdzie to wrzucic czy do php czy do baz, ostatecznie padło na bazy


mam taki kodzik w php
  1. <?php
  2.  
  3. $db -> Execute("UPDATE temida_users SET user_child = NULL");
  4. $row = $db -> Execute("SELECT user_name,user_id, user_parent, user_child FROM temida_users WHERE u
    ser_level <> 0 ORDER BY user_id"
    );
  5. foreach($row -> GetRows() as $cos){
  6. if($cos["user_parent"] != 0){
  7. $child_database = $db -> GetOne("SELECT user_child FROM temida_users WHERE user_id = '".$cos["user_parent"]."'");
  8. if(is_null($child_database)){
  9. $childs = array();
  10. }
  11. else{
  12. $childs = unserialize($child_database);
  13. }
  14. array_push($childs, $cos["user_id"]);
  15. $db -> Execute("UPDATE temida_users SET user_child = '".serialize($childs)."' WHERE user_id = '".$cos["user_parent"]."'");
  16. unset($childs);
  17. unset($child_database);
  18. unset($child);
  19. }
  20. }
  21.  
  22. ?>


kod dziala na tabeli:

  1. CREATE TABLE temida_users
  2. (
  3. user_id int8 NOT NULL DEFAULT NEXTVAL('temida_users_user_id_seq'::regclass),
  4. user_parent int8 DEFAULT 0,
  5. user_child text,
  6. }


w user_child znajduje sie zserialozowana tablica z dziecmi danego usera.

no i niestety juz przy okolo 1200 wpisach w bazie, czas dzialania tego skryptu na serwerkach nazwa.pl to ponad 100 sekund, az boje sie sprawdzac co bedzie jak bedzie tego wiece

ma ktos pomysł na zoptymalizowanie tego?


UPDATE:

przysniło mi sie conieco i taki kod:

  1. <?php
  2.  
  3. $db -> Execute("BEGIN");
  4. $db -> Execute("UPDATE temida_users SET user_child = NULL");
  5. $row = $db -> Execute("SELECT user_id, user_parent FROM temida_users WHERE user_level <> 0 ORDER BY user_id");
  6. $users = $row -> GetRows();
  7. $tree = array();
  8. foreach($users as $cos){
  9. if($cos["user_parent"] != 0){
  10. if(is_array($tree["".$cos["user_parent"].""])){
  11. array_push($tree["".$cos["user_parent"].""], $cos["user_id"]);
  12. }
  13. else{
  14. $tree["".$cos["user_parent"].""] = array();
  15. array_push($tree["".$cos["user_parent"].""], $cos["user_id"]);
  16. }
  17. }
  18. }
  19. foreach ($tree as $a => $b){
  20. $tree2[$a] =serialize($tree[$a]);
  21. }
  22. foreach ($tree2 as $a => $b){
  23. $db -> Execute("UPDATE temida_users SET user_child = '".$b."' WHERE user_id = '".$a."'");
  24. }
  25. $db -> Execute("COMMIT");
  26.  
  27. ?>


na tych samych danych czas dzialania 13 sekund. z czego 12 to wysłanie samych UPDATE do bazy, mysliCie ze da sie tutaj cos jeszcze wyciągnąc.

Ten post edytował AcidBurnt 28.12.2005, 01:14:23
Go to the top of the page
+Quote Post

Posty w temacie


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: 21.08.2025 - 18:29