Gå til innhold

Beste praksis for store SQL queries i php


Anbefalte innlegg

Hei
 
Har lenge lurt på hva som er beste praksis for hvordan jeg skal lagre SQL-queries, som brukes i php koden.
 
Raskt php kode eksempel:

$query = $pdo->prepare("SELECT column1, column2, column3 FROM example WHERE columnX=:columnX;");
$query->bindParam(':columnX', $var);
$query->execute();

Kun SQL koden:

SELECT column1, column2, column3 FROM example WHERE columnX=:columnX;

Re-formatert SQL kode ser slik ut:

SELECT
  column1,
  column2,
  column3
FROM example
WHERE columnX = :columnX;

 
Men hva gjør man når man joiner 10-20 tabeller, samt har et relativt mange kriterier?
Resultatet er en kode som ikke lenger er "lett-leselig", og det er nærmest umulig å holde oversikten...
 
For å i det hele tatt forstå SQL koden, og kunne gjøre endringer, må den reformateres slik som siste eksempelet over, men da får den fort en lengde på 2-3 stk A4 sider.
 
Hva er beste praksis her? Er gjerne noen hundre linjer med php kode, samt diverse SQL queries i forskjellig lengde.
Mesteparten av SQL koden får fint plass inne i php-filene, men så er det disse 10%-ene som lager problemer...
 
Er det god eller dårlig praksis å lese inn .sql filer på denne måten?

$sql=fopen("query.sql");

Bør jeg isåfall fjerne alle mellomrom når den leses inn for å spare på resurser og trafikk på serveren? Ser for meg noen 100-talls unødvendige mellomrom nemlig...

 

Spørsmål 2:

Til slutt, noen som vet om en enkel tjeneste på nett for å reformatere SQL filer, slik at koden får plass på 1 svært lang linje? istedet for å bruke unødvendig mange linjer og mellomrom?? En slags sql-optimaliserer med andre ord?

 

Kom gjerne med eksempler og forslag til hvordan proffene gjør det :)

Endret av jpg
Lenke til kommentar
Videoannonse
Annonse

Formatering av sql har veldig lite å si for ytelse, så det behøver du ikke bekymre deg for. Formater med tanke på best mulig lesbarhet.

 

Når du må joine 10-20 tabeller i en spørring kan man spørre seg om det kan være en tanke å denormalisere databasen litt. 

 

Hvis du ikke ønsker å embedde sql i php-kode vil jeg heller anbefale lagrede prosedyrer og views, enn å lagre sql i filer, views og prosedyrer blir "kompilert" og optimalisert i databasen en gang for alle. Du oppnår jo forøvrig tildels det samme med prepared statements, som du allerede bruker.

 

Du kan vurdere å bruke en ORM, men det har både fordeler og ulemper ...

Lenke til kommentar

Er det god eller dårlig praksis å lese inn .sql filer på denne måten?

$sql=fopen("query.sql");

 

Bruk require_once(), require(), include_once() eller include() etter behov, og legg sql'en i egne klasser (alternativt i konstanter eller funksjoner). Å ta i bruk en MVC struktur kan også være fornuftig, avhengig av størrelsen på det du skal lage.

 

// fooSQL.php
class fooSQL
{
    const EXAMPLE_SQL = <<<SQL
        SELECT 
            column1, column2, column3 
        FROM 
            example 
        WHERE 
            columnX=:columnX
SQL;            
}

// foo.php
class foo
{
    protected $pdo;
    
    public function __construct(){
        $this->pdo = // pdo config
    }
    
    public function something(){
        $query = $this->pdo->prepare(fooSQL::EXAMPLE_SQL);
        $query->bindParam(':columnX', $var);
        $query->execute();
        // ....
    }
}

// test.php
// includes bør håndteres av en autoloader
include_once('foo.php');
include_once('fooSQL.php');

$foo = new foo();
$foo->something();
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å
×
×
  • Opprett ny...