Hur kan jag göra denna (dessa) query bättre?

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
marcusgarden



Medlem i: 2951 dagar

Status: Offline



#742177
Inlägg Skrivet: 2018-04-12 23:38      Ämne: Hur kan jag göra denna (dessa) query bättre? Citera

Kort och gott, hur kan jag göra denna query mer effektiv? Den är hyfsat långsam nu:/

KOD:
1:
 
2:
$query = "SELECT id, email FROM users";
3:
      $db->setQuery($query);
4:
      $db->query();
5:
      $num_users = $db->getNumRows();
6:
      $usern = $db->loadAssocList();
7:
 
8:
for ($zzz = 0; $zzz < $num_users; $zzz++)
9:
      {
10:
         $query = "UPDATE entry SET user_id = '" . $usern[$zzz]['id'] . "' WHERE mail = '" . $usern[$zzz]['email'] . "' AND id > " . $from . " AND id < " . $to . " AND (user_id = 0 OR user_id = '') ORDER BY id";
11:
         $db->setQuery($query);
12:
         $db->query();
13:
      }
14:
            
15:
      $query = "SELECT user_id, reg FROM entry WHERE user_id <> '0' AND reg <> '' AND id > " . $from . " AND id < " . $to . " GROUP BY reg ORDER BY id";
16:
      $db->setQuery($query);
17:
      $db->query();
18:
      $num_s = $db->getNumRows();
19:
      $dos = $db->loadAssocList();
20:
            
21:
      for ($zzz = 0; $zzz < $num_s; $zzz++)
22:
      {
23:
         $query = "UPDATE individuals SET user_id = '" . $dos[$zzz]['user_id'] . "' WHERE reg = '" . $dos[$zzz]['reg'] . "' AND reg <> ''";
24:
         $db->setQuery($query);
25:
         $db->query();
26:
      }
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
LimpanDSS



Medlem i: 2181 dagar
Från: Stockholm
Status: Offline



#742203
Inlägg Skrivet: 2018-05-06 18:04      Ämne: Citera

Kan vara knivigt det där med queries =)

När du använder dig av mysqli->query så måste frågan vid varje exekvering tolkas på nytt vilket kan leda till relativt grova prestandaförsämringar. För att hoppa över tolkningssteget vid varje exekvering, utan endast göra det en gång, kan så kallade prepared statements användas, vilket i ditt fall bör förbättra prestandan tämligen mycket, förutsatt att mängden användare inte är obetydlig.

Se MySQLi Prepared Statements:
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
 

_________________
Github
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic