Kom ihåg mig?
Home Menu

Menu


Acceptabelt resurskrävande?

 
Ämnesverktyg Visningsalternativ
Oläst 2009-08-18, 15:18 #11
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Använder du färdiga programvaror med plugins så är det dessutom ganska ofta som data hämtas flera gånger helt i onödan.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-18, 20:58 #12
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
lagra alla sql-frågor som lagrade procedurer vet inte hur stor skillnad det blir i mysql men i mssql säger dom iaf det ger en prestandaökning.. värt att testa om prestanda är ett problem kanske.
taz76 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-18, 21:36 #13
objx objx är inte uppkopplad
Medlem
 
Reg.datum: Mar 2008
Inlägg: 154
objx objx är inte uppkopplad
Medlem
 
Reg.datum: Mar 2008
Inlägg: 154
Jag brukar använda PHP för att testa hur lång tid vissa queries tar att utföra samt hur lång tid det tar att läsa ut resultatet.

Skapa två funktioner i din kod som ser ut på följande sätt:

<?php

$timers = array();

function startTimer($ref="timer"){
global $timers;

$timers[$ref] = microtime(true);
}


function endTimer($ref="timer",$decimals=3){
global $timers;

if(!isset($timers[$ref])){
return 0;
}
$secs = (float) microtime(true) - $timers[$ref];
return round($secs,$decimals);
}
?>


Sen kan du ta reda på tidsåtgången för varje query/resultset genom att använda funktionerna på följande sätt:

<?php

startTimer("query1");
$query1 = mysql_query("SELECT * FROM .... WHERE ...");
print "query1 tog ".endTimer("query1")." sekunder att genomföra";



startTimer("query2");
$query2 = mysql_query("SELECT * FROM .... WHERE ...");
while($row = mysql_fetch_array($query2)){
......
}
print "query2 tog ".endTimer("query2")." sekunder att genomföra";

?>

Denna metod brukar ofta hjälpa mig att hitta ooptimerade queries.

Du kan ju givetvis ställa samma frågor direkt i MySQL-prompten och få reda på hur lång tid varje förfrågan tar. Men då blir det lite jobbigare om man vill testa tidsåtgången beroende på vilka villkor som ställs i varje query.

Jag tycker inte att 80 frågor låter mycket om du har 20-30 tabeller som datan hämtas från och som skall presenteras på samma sida.

Däremot så skulle du ju kunna kolla upp om en fråga ställs fler än en gång på samma sida. I såna fall så är det väl smartare att cacha resultatet i en array som du sedan kan återanvända.
objx är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-19, 07:33 #14
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Finns det data som inte ändras särskilt ofta men som ofta hämtas kan det också vara en bra idé att skapa statiska versioner.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-19, 11:11 #15
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
kolla upp MySQL EXPLAIN kommandot...
då ser man hur index m.m används..


Kod:
 
function sql_debug($sql){

	$r = mysql_query("EXPLAIN " . $sql);
	
	$nc = mysql_num_fields($r);

	$str= '<table border=1><tr>';

	for ( $i=0; $i < $nc; $i++ ){ $str .= '<td><i>'. mysql_field_name($r,$i) . '</i></td>';	}

	$str .= '</tr>';

	while ($row = mysql_fetch_row($r)){ 
 $str .= '<tr>';
 for ( $i=0; $i < $nc; $i++ ) {	$str .= '<td>' . $row[$i] . '</td>'; }
 $str .= '</tr>';
	}
	return $str .'</table>';
}

print sql_debug("SELECT * FROM ...");
danjel är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-19, 14:23 #16
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Notera att när du använder ORDER BY i en MySQL fråga så använder MySQL inte sitt Index. Sådana frågor kommer alltså att ta tid.
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-19, 14:25 #17
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
MySQL kan visst använda index vid order by.
WizKid är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 06:14.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017