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 :

Pourquoi une requête "select * from ma_table" met un certain temps avant de retourner la première ligne ?


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Pourquoi une requête "select * from ma_table" met un certain temps avant de retourner la première ligne ?
    * Bonjour, *

    Pourquoi une requête "select * from ma_table" met un certain temps avant de retourner la première ligne ? C'est d'autant plus surprenant que le délai annoncé par "explain" pour l'affichage de la première ligne est 0.00 ...

    Ce temps semble proportionnel au nombre de lignes de la table, ou du nombre de lignes attendues (si on utilise la clause "limit" par exemple). Et il n'est pas négligeable (8 s pour une table de 100 000 lignes par exemple).

    Vu que la requête se traduit par uniquement un parcours séquentiel de la table, la première ligne devrait arriver instantanément. C'est ce qui se passe avec Oracle.

    REM: j'ai désactivé l'alignement sous psql (\a).

    * Merci *

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 476
    Points : 831
    Points
    831
    Par défaut
    si tu utilises pgadmin, c'est l'affichage du resultat dans cette application qui est long pas la reponse de postgres

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Non, c'est avec psql, et ça fait pareil en java/jdbc (45 s pour accéder à la première ligne, puis 0.08s pour parcourir les 100 000 autres !).
    Le comportement est le même avec une autre base / version / machine / système.

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai la réponse, par un autre canal.

    Sous psql, c'est lié au "FETCH_COUNT". Par défaut, le résultat est affiché en une seule fois, seulement lorsque tous les résultats ont été récupérés. Si on fait un "\set FETCH_COUNT xxx" les résultats sont affichés pour par lots de xxx. Si xxx est petit, c'est rapide.

    En java, c'est beaucoup mieux aussi (faire "statement.setFetchSize(xxx);". Pour la table de 100 000 lignes, le première ligne est récupérée en 0.28s (au lieu de dizaines de secondes!), et les 100 000 suivantes en 0.05s (à peu près comme avant).
    Mais en fait, c'est pas suffisant, il reste encore quelque chose, ce qui se voit sur une table plus grosse: plusieurs minutes pour avoir la première ligne d'une table de 20 000 000 de lignes.
    Pour que ça marche complètement, il faut que la connexion ne soit pas en autocommit ("conn.setAutoCommit(false);"). Là, même avec 20 000 000 de ligne, le premier résultat arrive en quelques millisecondes.

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

Discussions similaires

  1. Enregistrer une requête SQL SELECT sous VB Express
    Par Invité dans le forum VB.NET
    Réponses: 6
    Dernier message: 29/01/2008, 09h04
  2. Couper une requête à compter de FROM
    Par DurDur dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/12/2007, 17h17
  3. [MySQL] Requête MySQL : Select * from ..
    Par JmL40 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/05/2007, 16h06
  4. récuperer une variable d'une requéte de selection
    Par foufa007 dans le forum JDBC
    Réponses: 2
    Dernier message: 03/05/2007, 22h21
  5. Exécution tres Long d'une requête de Selection
    Par touhami dans le forum SQL
    Réponses: 10
    Dernier message: 09/03/2006, 09h34

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