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

Requêtes PostgreSQL Discussion :

Performance requete Postgis


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut Performance requete Postgis
    Bonjour,

    J'ai une requête qui permet de chercher des personnes dans un rayon de x kms autour de chez soi du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select pseudo from ville a,ville b, membre
    where contains(buffer(a.geom ,0.9) ,b.geom)
    AND a.ville_nom='LILLE'
    AND a.ville_dep ='59'
    AND membre_ville_id =b.ville_id
    AND a.ville_dep = b.ville_dep
    C'est assez rapide car la recherche se limite au département ou à la région.

    Mais pour n'oublier personne, je ne peux me limiter à une recherche dans la même région car des membres se situent aux abords de régions limitrophes.

    Alors dans ce cas la requête scanne toute la base et là ça prend un temps fou.

    J'ai pensé à limiter la recherche aux régions limitrophes mais je ne vois pas comment faire cela à part connaitre pour chaque région ces régions limitrophes et tout rentrer dans une base...Bref pas évident.

    Avez-vous une idée pour améliorer la rapidité ?

    Cordialement

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Je ne suis pas spécialiste en SIG mais n'y a t-il pas dans Postgis une fonction qui permet de trouver les voisins d'un polygone ou de dire si le polygone X est voisin du polygone Y ?
    Avec une auto-jointure ça devrait être possible ?

    En parlant des jointures, la syntaxe normalisée depuis 1992 utilise l'opérateur JOIN !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    Je vous avoue que moi non plus je ne suis pas un "spécialiste " en SIG . Mes connaissance sont limitées à la base...

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Regarde déjà chez SQLPro si tu trouves ton bonheur.

    Il y a aussi ce forum spécialisé en SIG dans lequel tu trouveras peut-être plus facilement de l'aide qu'ici.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    Merci !

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Votre prédicat n'est pas sargeable contains(buffer)... + departement

    Il faut utiliser distance et pas buffer

    Avez vous posé un index spatial sur la colonne geom ?

    Au passage je remarque que votre façon de faire des jointures date de près de 20 ans. Depuis 1992 c'est JOIN qu'il faut utiliser :

    Au final quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT pseudo 
    FROM   ville a
           INNER JOIN ville b
                 ON distance(a.geom, b.geom) < 9000
           INNER JOIN membre as m
                 ON m.membre_ville_id =b.ville_id
    WHERE a.ville_nom='LILLE'
      AND a.ville_dep ='59'

    Bref, apprenez SQL. C'est un vrai langage. Mon site web comme mon bouquin, peuvent vous y aider !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    mais pourquoi est-ce idiot d'utiliser Buffer() dans mon cas ?

    Cordialement

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    A votre avis, appliquer 2 fonctions à la place cela va
    1) aller plus vite
    2) aller aussi vite
    3) aller moins vite
    qu'une seule fonction ?

    En sus, comme je crois l'avoir déjà dit, ces fonctions ne sont pas "sargeable".

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Performance requete client/serveur
    Par Shiven dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 30/11/2007, 19h15
  2. pb performance requete avec différence dates
    Par marion782 dans le forum SQL
    Réponses: 20
    Dernier message: 11/12/2006, 17h33
  3. [9i] Performance requete UPDATE + IN
    Par bob33 dans le forum Oracle
    Réponses: 12
    Dernier message: 26/10/2006, 15h22
  4. [9i]Performance requete dlink
    Par mezoo dans le forum Oracle
    Réponses: 8
    Dernier message: 31/08/2006, 09h16
  5. Performance requete SQL
    Par billout9 dans le forum Oracle
    Réponses: 4
    Dernier message: 28/11/2005, 21h13

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