webForumDet fria alternativet

Optimera PHP SQL-kod?

PHP

7 svar · 922 visningar · startad av Kenchu

Medlem sedan apr. 2004113 inlägg
Frågan#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

Medlem 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..

Medlem 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.

Medlem 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. :)

Medlem 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. :)

Medlem 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.

Medlem 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.

Medlem 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)

296 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
157 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
152 ms — ändringar (db)