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

SQL Oracle Discussion :

select trop lent


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 67
    Par défaut select trop lent
    Bonjour à tous

    une question qui me taraude !
    je suis sur une base oracle 10.2.04, j'utilise le client sqldeveloper.

    je fais un simple cela prend des années avant de retourner un résultat ! pourtant ca doit juste lire le début de la table et afficher le résultat !
    (la table fait environ 300 000 ligne sur 5 colonne)

    même quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from MaTable;
    cela rend la main très rapidement

    est ce que quelqu'un aurait une idée !

  2. #2
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Citation Envoyé par cyclone_yas Voir le message
    Bonjour à tous

    je fais un simple cela prend des années avant de retourner un résultat ! pourtant ca doit juste lire le début de la table et afficher le résultat !
    Pourquoi cela ne lirait que le debut de la table ???
    Cela vous lit votre table entierement, donc vous renvoie le maximum de données possibles, donc un flux important, donc lenteur !!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 67
    Par défaut
    Citation Envoyé par Yanika_bzh Voir le message
    Pourquoi cela ne lirait que le debut de la table ???
    Cela vous lit votre table entierement, donc vous renvoie le maximum de données possibles, donc un flux important, donc lenteur !!
    Désolé l'ami, il va lire que le début de la table
    et au fur et à mesure que tu scrole il lit la suite

  4. #4
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Citation Envoyé par cyclone_yas Voir le message
    Désolé l'ami, il va lire que le début de la table
    et au fur et à mesure que tu scrole il lit la suite
    C'est moi qui suis désolé pour vous ...
    Comment faites vous donc pour lire completement un table alors ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 67
    Par défaut
    si ta table fait 10 000 000 de ligne
    un select * ne ramènera pas toutes les lignes en mémoire

    le select * s'affichera instantanément, il ramènera les première lignes !

  6. #6
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Je ré itère donc ma question, comment faites vous pour selectionner TOUTES les lignes de votre table !

  7. #7
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Un count(*) peut utiliser un index de clé primaire, sans aller lire la table.
    Le select * va effectivement aller chercher que les premières lignes (en fonction du fetch size). Il peut y avoir plusieurs raisons pour lesquelles c'est plus long.

    Par exemple: une table qu'on remplit de bcp d'enregistrement, puis où on delete tous les enregistrements sauf les derniers. Alors, le full scan devra lire bcp de blocs vides avant de trouver les premiers enregistrements.

    Ou une table vidée par des delete mais remplie par des inserts en direct path.

    Cordialement,
    Franck.

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Ca dépend aussi du type des colonnes. Si tu as un blob alors là le select * va prendre beaucoup de temps.

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Bonjour Pachot,

    Le select * va effectivement aller chercher que les premières lignes (en fonction du fetch size).
    Je précise qu'en même que le fetchsize n'influe pas sur le nombre de lignes retournées, il influe seulement sur le nombre d'aller/retour entre le client et le serveur pour ramener toutes les lignes demandées (et par conséquent sur le consistent get nécessaire).

    Certes le client commence à récupérer des données mais il ne récupère pas la main avant d'atteindre la dernière ligne comme avec sqlplus par exemple.

    Par contre, le comportement décrit par cyclone_yas ressemble à celui de Toad qui effectivement pagine la requête automatiquement pour ne renvoyer que les 500 1eres lignes il me semble.

    Donc si rien ne se passe pendant longtemps avant d'obtenir les 1eres lignes ça ressemble effectivement à un problème de High Water Mark.

  10. #10
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Certes le client commence à récupérer des données mais il ne récupère pas la main avant d'atteindre la dernière ligne comme avec sqlplus par exemple.
    ici, il s'agit de sqldeveloper. Donc les lignes ne sont fetchées que pour les afficher. Si on ne scroole pas jusqu'en base, toutes les lignes ne sont pas lues.

  11. #11
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Ah oui je n'avais pas vu que c'était SqlDeveloper mais je pense que ça ne change rien, à mon avis SqlDeveloper comme Toad réécrit la requête pour paginer et refetch les lignes au fur et à mesure du scroll, à mon avis rien à voir avec le fetch size.

    [edit]OK il semble que le fetch size de SqlDeveloper correspond au nombre de lignes fetch par SqlDeveloper contrairement à l'array fetch size de sqlplus.
    Donc SqlDeveloper s'appuie bien sur le fetch size pour paginer la requête (mais on est d'accord, il s'agit bien de pagination ?)

  12. #12
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Citation Envoyé par pachot Voir le message
    ici, il s'agit de sqldeveloper. Donc les lignes ne sont fetchées que pour les afficher. Si on ne scroole pas jusqu'en base, toutes les lignes ne sont pas lues.
    Donc ca n'a pas grand chose a voir avec SQL, mais devrait plutot etre posté dans la rubrique outil.

Discussions similaires

  1. Convolution trop lente...
    Par progfou dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 05/08/2006, 11h44
  2. [Eclipse] Editeur de code trop lent
    Par Benzeghiba dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 10/11/2005, 14h02
  3. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  4. [SAGE] ODBC trop lent
    Par tileffeleauzed dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/11/2004, 09h56
  5. Envoi de mail trop lent
    Par MASSAKA dans le forum ASP
    Réponses: 3
    Dernier message: 15/10/2004, 10h57

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