IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

requête sql, problème performance


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Points : 69
    Points
    69
    Par défaut requête sql, problème performance
    Bonjour à tous,

    Je rencontre un problème de performance lorsque j'effectue une requête sql.
    Je suis obligé d'utilisé une requête sql classique car il s'agit d'une base de données POSTgis avec des fonctions particulières.

    La requête retourne environ 3000 entrées. Si je mets une limite à 100 entrées, cela fonctionne bien sinon cela mouline dans le vide

    Comment puis-je optimiser ce code ?
    - en utilisant un itérateur?

    D'avance, merci beaucoup pour votre aide?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public function getCountryAction(){
            $em = $this->getDoctrine()->getEntityManager();
            $connection = $em->getConnection();
            $sql = "SELECT gid, cntry_name, ST_AsGeoJSON(world_borders.geom) as geom, count(tut_user.location) AS density, 
                (SELECT count(*) FROM tut_user) as total
                FROM world_borders LEFT JOIN tut_user 
                ON st_contains(world_borders.geom, tut_user.location)
                GROUP BY world_borders.gid";
     
            $statement = $connection->prepare($sql);
            $statement->execute();
            $fc = new FeatureCollection();
     
            while ($row = $statement->fetch() ) {
                $id = $row['gid'];
                $geom = json_decode($row['geom']);
                $cntry_name = $row['cntry_name'];
                $density = $row['density'];
                $total = $row['total'];
                $feature = new Feature($id,$geom, array('country' => $cntry_name, 'density' => $density, 'total' => $total) );
                $fc->addFeature($feature);
            }
     
     
            return $response = json_encode($fc);

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    peux tu nous en dire plus, que compte tu faire de tous ces 3000 enregistrements et plus ?

    d'habitude on récupère 1 ou 2 enregistrements mais pas tous les enregistrements d'un coup.

  3. #3
    Membre du Club
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Points : 69
    Points
    69
    Par défaut merci
    Hello,

    Merci pour ta réponse c'est sympa de m'avoir lu!
    J'ai besoin de toutes ces entrées car il s'agit de polygones respectivement les polygones de chaque pays.

    Ensuite je compte faire une map choropleth interractive comme ici:
    http://leafletjs.com/examples/choropleth.html

    Merci beaucoup!

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    déjà il faut renvoyer le tout dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return  $q->execute(array(),Doctrine::HYDRATE_ARRAY);
    sinon l'idée peut être est de récupérer par bloc de 500 enregistrements et de les traiter au fur et à mesure.

Discussions similaires

  1. requête SQL problème avec relation N-N
    Par p'tite Sandrine dans le forum Requêtes et SQL.
    Réponses: 23
    Dernier message: 05/10/2007, 12h08
  2. Requête SQL, problème d'écriture
    Par porci82 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/06/2007, 14h56
  3. [Requête/SQL]Problème de sélection d'enregistrements
    Par phil06 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 15/04/2007, 23h47
  4. [Requêtes SQL] Problème de jointure ?
    Par soso78 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/12/2006, 15h37
  5. [Requête SQL] Problème pour echantilloner
    Par jool dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/08/2005, 09h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo