webForumDet fria alternativet

Optimera PHP SQL-kod?

7 svar · 920 visningar · startad av Kenchu

KenchuMedlem sedan apr. 2004113 inlägg
#1

Tjenna,

jag bara undrar om det finns något sätt att optimera koden för PHP med MySQL. Om det finns liksom några speciella kommandon eller så jag inte känner till. För just nu blir mina sidor jag kodar med PHP och SQL väldigt sega, och om det beror på min kod eller servern vet jag inte. :D

Hur som helst... Det gäller SELECT-queries... Mallen, just för mig, brukar se ut något i den här stilen:

$conn = mysql_connect("","","");
mysql_select_db("");

$result = mysql_query("
   SELECT *
   FROM tabell
   WHERE något = något annat
   ORDER BY något
");

while ($row = mysql_fetch_array($result)) {
   echo "{$row["något"]} {$row["något"]}";
}

mysql_free_result($result);
mysql_close($conn);

Min fråga är nu om det finns något bättre sätt att göra detta på... Finns det? :D Eller har ni några andra tips/förslag?

Tack tack

HelmertzMedlem sedan maj 2005353 inlägg
#2

php.net står det i kommentarerna att mer minne används om man använder sig av mysql_free_result..

oHLLeMedlem sedan nov. 2002302 inlägg
#3

Det kan också vara så att det fält du sorterar efter inte har något index. Då kan frågan bli slö att exekvera.

BäckmanMedlem sedan nov. 2001274 inlägg
#4

Istället för...

while ($row = mysql_fetch_array($result)) {

...kan du använda...

while ($row = mysql_fetch_assoc($result)) {

Med mysql_fetch_array() så kan man skriva både $row[0] och $row['fältnamn'] för att få fram första fältet. Det borde då vara effektivare att använda mysql_fetch_assoc() om man bara vill kunna skriva $row['fältnamn'] då den andra vektorn inte skapas. Kanske ingen gigantisk prestandaförbättring utan mera finlir. :)

K@llenMedlem sedan mars 20032 667 inlägg
#5

Byt ut * mot de fält/kolumnnamn du ska hämta. Det är onödigt att hämta mer data än nödvändigt. :)

HansenMedlem sedan aug. 2000374 inlägg
#6

K@llen skrev:

Byt ut * mot de fält/kolumnnamn du ska hämta. Det är onödigt att hämta mer data än nödvändigt. :)

Kan inte instämma mer!

Se också till att du har nödvändiga index på kolumnerna som du sorterar efter. MySQLs EXPLAIN är din vän vid optimering.

DufferMedlem sedan mars 2003429 inlägg
#7

en annan bra minnesregel är att tänka på att sql läses baklänges, så de attributen som kan solla bort mest data ska stå sist i sql-satsen.

learnMedlem sedan jan. 20051 130 inlägg
#8

Duffer skrev:

en annan bra minnesregel är att tänka på att sql läses baklänges, så de attributen som kan solla bort mest data ska stå sist i sql-satsen.

(y)

125 ms totalt · 3 externa anrop · v20260731065814-full.b943c234
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)