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

PostgreSQL Discussion :

Problème sur une requête simple dans une table simple


Sujet :

PostgreSQL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Problème sur une requête simple dans une table simple
    Bonjour à tous,

    J'ai une table vraiment très simple

    Voici sa définition ( 3 colonnes)

    origine integer
    destination integer
    temps integer


    En gros j'ai un point d'origine, un de destination et un temps entre les deux

    Il y a un index unique sur le couple (origine,destination)

    si je fais une requête du genre
    select * from matable where origine = 45 ;
    La requête est instantanée

    par contre si je fais :
    select * from matable where destination = 45 ;
    ça prend 5 minutes.

    Personnellement je n'arrive pas du tout à expliquer la différence entre ces deux requêtes et surtout les temps d'exécution différent ?!

    J'ai utilisé REINDEX... j'ai posé un nouvel index sur le champ destination... mais rien n'y fait !


    NB : La table en question possède 57 millions de lignes.

    genre

    origine destination temps
    1 1 5
    1 2 7
    2 1 5
    2 3 9

    ....
    Voila



    Avez vous une idée ?


    Merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Quelques remarques
    - pour les problèmes de performance, il faut donner le résultat d'EXPLAIN ANALYZE sur les requêtes qui posent problème.
    - un index composite, est utilisable pour chercher sur le 1er composant seul, ou le 1er et le 2eme, mais pas sur le 2eme seul. C'est l'organisation des index qui veut ça. C'est probablement pourquoi le where origine.. est rapide alors que le where destination est lent.
    - ajouter un index sur le champ destination seul devrait donner de bons résultats. Si ce n'est pas le cas ça peut être parce qu'un ANALYZE de la table n'a pas été fait entre la création de l'index et le test. Dans ce cas, réessayer en faisant ANALYZE de la table (et poster l'EXPLAIN ANALYZE de la requête)

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Effectivement, il y a un mieux, je savais pas qu'après avoir posé l'index
    il était intéressant de faire un ANALYSE.

    Les performances ne sont toujours pas aussi rapides qu'avec le champ origine, mais en tout cas y'a vraiment du mieux.

    Merci pour cette info.

    Bonne journée

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    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 : 21 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    Un "SELECT *" n'est que rarement optimisable. Nommez vos colonnes et ne renvoyez que celles nécessaire. De plus si votre index est couvrant cela ira encore plus vite.

    Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/quoi-indexer/

    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/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/04/2011, 14h38
  2. Réponses: 6
    Dernier message: 31/05/2010, 14h12
  3. erreur dans une requête sql dans une fonction php
    Par frboyer dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2009, 13h37
  4. [Requête] Utilisation d'une fonction perso dans une requête
    Par Julien Dufour dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/03/2007, 09h53
  5. Réponses: 4
    Dernier message: 16/05/2006, 23h15

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