Gå til innhold

Fleksibel- og hurtig sql-spørring?


Anbefalte innlegg

Noen tips til å hvordan forbedre spørringene mtp. fleksibilitet, hurtighet?

 

Jeg kan gi et tips til lite effektiv sql-spørring;

 

$sql = mysql_query("select fooCol,fooName from fooTable order by id LIMIT 300");
 while($row = mysql_fetch_array($sql)){
   $getMoo = mysql_fetch_array(mysql_query("select mooThong from mootable where id = fooCol"));
   echo " ".$row["fooName"]." ".$getMoo["mooThong"]." ";
 }

 

- Hvordan kan man gjøre koden ovenfor bedre? JOIN, i loop?

 

- Vil det være nyttig å lage funksjoner for sql-spørring i en cfg-fil som inkluderes, istedenfor en drøss med spørringer rundtomkring?

 

Håper på svar, ellers takk! :)

Endret av sfenne
Lenke til kommentar
Videoannonse
Annonse

Dette var en smule forvirrende, når du lurer på hvordan du kan beste optimalisere spørringer så er det beste om du viser oss tabellstrukturene og markerer primær og fremmednøkkel.

 

Ut fra det jeg ser så antar jeg at du er på jakt etter LEFT JOIN?

Det vil si at du henter fra tabell moontable dersom den har en tilsvarende id. LEFT JOIN er videre en foretrukken måte å joine en spørring på dersom det ikke er andre forhold til stede.

 

Spørringen din kan da muligens se slik ut:

 

SELECT fooTable.fooCol, fooTable.fooName, moontable.mooThong

FROM fooTable

LEFT JOIN mootable

ON fooTable.fooCol = moontable.id

LIMIT 300

 

Ut fra echo'en din ser det ikke ut som du bruker fooCol - hvis dette er tilfellet kan du droppe den fra SELECT ....

 

Over til optimalisering så er dette igjen avhengig av tebellstrukturen din - dvs. definering av felter, indekserte felter og tabelltype. Du kan alltid kjøre EXPLAIN foran en spørring for å se hva MySQL forventer at den må gjøre. Da får du opp en oversikt over blandt annet hvor mange rader MySQL forventer å finne. Stemmer dette tallet ganske bra, så er det ikke så ille. Ellers må du nok indeksere eller gjøre noen felter unike. Eventuelt endre hele tabellen din. Når det gjelder litt avansert bruk av MySQL og optimalisering vil jeg på det sterkeste anbefale High Performance MySQL av Jeremy D. Zawodny, Derek Balling. Den tar for seg veldig mye nyttig. Det er også viktig med litt grunnleggende databaseforståelse.

 

Over til andre delen av spørsåmplet ditt, om du burde lage en config fil med spørringer eller ha en drøss med spørringer.

 

Svaret der er ganske åpenbart. Dersom du har mange like spørringer burde disse samles under en egen fil, funksjon eller class. Dersom spørringene varierer så er dette selvfølgelig umulig eller mer komplisert enn å ha spørringer her og der.

 

Videre burde du alltid ha egene class'er for MySQL, slik at du lett kan gå over fra mysql_ til f.eks. mysqli_ eller en annen database løsning. Det vil si at du samler alle mysql funksjonene i en egen fil, og bruker f.eks. $sql->query("spørring");

som da sender spørringen videre til mysql_query().

 

Lykke til!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...