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