ik wil mijn online software sneller maken
dus wil ik dat op 2 manieren doen
1 mijn sql indexes optimaliseren
2 minder queries, want ik heb er heeeeeeeeel veel :P
nu wil ik dus een klein scriptje schrijven waarmee ik de queries kan tellen op een bepaalde pagina
ik heb al iets gemaakt met SHOW SESSION STATUS en dit werkt opzich wel maar alleen als ik enigste ben die op dat moment in het systeem is
wat bijna nooit het geval is
dus zoek ik een goede manier om alle queries te tellen op een pagina
Ikzelf gebruik mysqli en heb een extended class gemaakt. Daar clone ik de mysqli_query() functie en plaats ik $i++ bij, om elke query te tellen. Hopelijk kan je daar wat mee.
haha nee daar heb je gelijk in maar de queries die ik gebruik vragen best veel informatie op
en ik heb bv ook veel queries die in de while weer 10 andere opvragen en dat dan bv X 100 of sommige paginas x 10.000
op dit soort plekken wil ik het gaan versnellen ik heb vanwege jarenlang aanpassen van mijn script ook veel dubbele dingen erin staan wat dus gewoon zonde is van snelheid
ik heb een best wel hele snelle server dus veel verschil zal je niet merken
maar als elke query die ik verminder 00.1 sec minder kan maken dan ken dit al gauw op sommige paginas 5/10 seconden of meer schelen en dat vind ik wel veel
Het bijkomend voordeel van zo'n wrapper-class, dit is wat @Ariën in wezen voorstelt, is dat je al je query-aanroepen op een uniforme manier regelt. Je roept hiermee dus indirect allerlei MySQL(i)-functionaliteit aan. Wat je vervolgens kunt doen is ook loggen welke queries er in pagina-aanroepen/een specifieke pagina-aanroep worden uitgevoerd. Vervolgens zou je kunnen kijken naar de hoeveelheid queries en of hierin te snijden valt, en naar de efficiëntie van deze queries, door deze eens met een EXPLAIN uit te voeren.
Ik weet dat je logging ook met SQL-commando's kunt regelen, maar softwarematige toggles in PHP zijn ook handig. Je kunt dan ook specifieke querybatches makkelijker isoleren, bijvoorbeeld dus alle queries die in een enkele pagina-aanroep plaatsvinden.
Queries in een while() moet je zoveel mogelijk vermijden. Hoe meer loopjes je hebt, hoe meer het exponentieel toeneemt.
ja daarom wil ik dit dus aanpassen :P
die loops wil ik in geval dat dit mogelijk is aanpassen naar een join
maar ik wil dit pagina voor pagina doen en doormiddel van dat tellen en loadtime kan ik zien of het heeft gewerkt
<?php
class Database extends mysqli {
public $totalQueries = 0;
public function query($query)
{
$result = parent::query($query);
$this->totalQueries = $this->totalQueries+1;
if($this->error) {
echo "Error:".mysqli_error($this)." op lijn: ".mysqli_errno($this));
}
return $result;
}
public function totalQueries(){
return $this->totalQueries;
}
}
?>
<?php
define("DB_HOST","localhost");
define("DB_USER","pietje");
define("DB_PASS","93h31m");
define("DB_NAME","blah");
include "/classes/database.inc.php";
// Je connectie die je globaal ergens start. let op dat de class hier Database heet.
$db = new Database(DB_HOST, DB_USER, DB_PASS, DB_NAME);
// Voer een query uit
$db->query("SELECT dit, dat FROM iets...");
echo "Uitgevoerde queries: ".$db->totalQueries;
?>
Nog mooier is een exception in plaats van de echo.