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

Langage SQL Discussion :

Rapidite d un requete SQL


Sujet :

Langage SQL

  1. #1
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut Rapidite d un requete SQL
    Slu

    je sais que le fait de faire des jointures est specialement "lourd"... j aimerais savoir si pour une requete qui disons retourne 50 record ... est ce que le temps de cette requete change beaucoup en fonction du nombre de record au deaprt dans la table ?

    Et a partir de quelle "taille" peut on considerer qu une table est "lourde" ?

    thx @+

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 124
    Points : 159
    Points
    159
    Par défaut
    Les jointures bien faites ça ralentit pas tant que ça.

    Les performances dépendent probablement aussi de ton pc, de la base de données utilisées, des index et donc pas seulement du nombre d'enregistrements.

    Il faut surtout veiller à choisir le bon type de jointure et si besoin à mettre en place des index.

    Sur de petites tables les index n'ont aucun intérêt, mets-en sur les tables qui ont quelques milliers de lignes au moins...

    La taille critique pour une table je ne la connais pas, moi je m'inquièterais pas trop pour ça, si tu optimises tes requêtes tu n'auras pas de problème je crois. A moins que tu comptes gérer des bases de données avec plusieurs centaines de milliers de lignes peut-être.

    Je n'ai pas énormément d'expérience sur les grandes tables remarque, j'espère ne pas me tromper!

  3. #3
    Membre expérimenté 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
    Points : 1 738
    Points
    1 738
    Par défaut
    Les indexs sur les grandes tables sont importants a conditions d'etre définis correctement (ils doivent etre définis sur des colonnes ramenant entre 0 et5% des lignes totales : ca ne sert a rien de mettre un index sur un champ boolean par exemple).
    Lorsque tu fais des sous requetes ou jointures, tu dois essayer d'etre le plus selectif possible, comme ca, le produit cartésien obtenu est moins important donc plus rapide a gérer.
    Ensuite des fonctions de tris sur des grosses tables mal indexées sont des catastrophes.

    J'espere que ceci pourra t'aider

    Bon courage

  4. #4
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Et pour un table simple avec juste une cle primaire ....
    Est ce que la rapidite d un simple select va dependre du nombre d enregistrement total dans la table ou du nombre d enregistrement resultant du select ?

    thx

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    je sais que le fait de faire des jointures est specialement "lourd"...
    Visiblement vous ne savez pas grand chose... Car un SGBDR (la lettre R signifie Relationnel donc induit les jointures) est spécialement conçu pour mettre en relation des données, c'est à dire faire des jointures...

    Ce n'est donc pas lourd, c'est justement ce qu'il y a de plus performant dans un SGBDR bien fait !

    Encore faut il éviter les nombreuses erreurs de "design" de bases de données que commettent les jeunes développeurs, par exemple en faisant des clefs sur 3 colones ou en utilisant des VARCHAR ou des GUID comme clef !!!

    Ce qui est lourd c'est le volume des données à brasser. Plus le volume des données est important plus la requête sera longue.

    C'est que ce je montre à longueur de journées dans les cours d'optimisation que je donne dans différents instituts de formation professionnelles...

    Est ce que la rapidite d un simple select va dependre du nombre d enregistrement total dans la table ou du nombre d enregistrement resultant du select ?
    Ni l'un ni l'autre : le nombre de lignes (la notion d'enregistrement propre au fichier n'existe pas dans les SGBDR) n'a aucune signification car une ligne peut être composée d'un seul octet ! C'est donc le nombre d'octets lu, traité et rapporté qui est significatif. Or un modèle parfaitement normalisé (donc beaucoup de relations) sera plus performant qu'un modèle mono table...

    A +

  6. #6
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Si c'est SQL Server qui devient poussif a gerer des cles avec 3 colonnes, il suffit de changer de SGBD pour continuer a faire du design dans l'etat de l'art !!

  7. #7
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par SQLpro
    Visiblement vous ne savez pas grand chose... Car un SGBDR (la lettre R signifie Relationnel donc induit les jointures) est spécialement conçu pour mettre en relation des données, c'est à dire faire des jointures...

    Ce n'est donc pas lourd, c'est justement ce qu'il y a de plus performant dans un SGBDR bien fait !
    Je ne peux qu'approuver cette affirmation ... (même si la leçon est un peu sévère ...)

    Sur le site où je travaille (une grande Banque française ...), il n'est pas rare de trouver des tables de plusieurs dizaines de millions de lignes, voire plusieurs centaines, la plus grande devant dépasser, me semble-t-il, le milliard ...

    C'est vrai que nous disposons de "gros" ordinateurs (Mainframe z/OS) et de "gros" SGBD (DB2 for z/OS) ...

  8. #8
    Membre expérimenté 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
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Luc Orient
    Je ne peux qu'approuver cette affirmation ... (même si la leçon est un peu sévère ...)

    Sur le site où je travaille (une grande Banque française ...), il n'est pas rare de trouver des tables de plusieurs dizaines de millions de lignes, voire plusieurs centaines, la plus grande devant dépasser, me semble-t-il, le milliard ...

    C'est vrai que nous disposons de "gros" ordinateurs (Mainframe z/OS) et de "gros" SGBD (DB2 for z/OS) ...
    C'est justement pour cela qu'on utilise des SGBDR, car si c'etait uniquement pour gerer 3 lignes, on peut utiliser un fichier texte
    Je reviens a ce que j'ai écrit plus haut, si les indexes sont bien pensés a la création, regénérés de temps en temps, si la BDD est bien gérées (taille des blocs,...) les jointures sont tres performantes. C'est sur que si tu fais un produit scalaire de deux tables a 100 millions d'enregistrements avec un jointure sur deux champs de type chaine de caractere, que tu mets un like, que tu tries sur une colonne non indexée et qu'en plus tu demandes un distinct alors la oui, tu peux partir boire ton café tranquillement apres avoir lancé la requete.

    Donc si tu as des problemes de performances avec tes requtes, regardes d'abord tout ca. Examine le plan d'execution de tes requetes, lance des statistiques. Si tout te parrait correct, cela peut venir de la configuration de ton SGBD, dans ce cas, demande de l'aide dans le forum approprié.

    Bon courage

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Yanika_bzh
    ... C'est sur que si tu fais un produit scalaire de deux tables a 100 millions d'enregistrements ...
    Euh ... pardonnez mon ignorance ... mais c'est quoi un produit scalaire ?

  10. #10
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Produit cartésien, sans doute...

  11. #11
    Membre expérimenté 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
    Points : 1 738
    Points
    1 738
    Par défaut
    Oups pardon oui carthésien... Je n'a trompé en ecrivant
    Je suis en ce moment en plein vecteurs

  12. #12
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par SQLpro
    Visiblement vous ne savez pas grand chose... Car un SGBDR (la lettre R signifie Relationnel donc induit les jointures) est spécialement conçu pour mettre en relation des données, c'est à dire faire des jointures...

    Ce n'est donc pas lourd, c'est justement ce qu'il y a de plus performant dans un SGBDR bien fait !

    Encore faut il éviter les nombreuses erreurs de "design" de bases de données que commettent les jeunes développeurs, par exemple en faisant des clefs sur 3 colones ou en utilisant des VARCHAR ou des GUID comme clef !!!

    Ce qui est lourd c'est le volume des données à brasser. Plus le volume des données est important plus la requête sera longue.

    C'est que ce je montre à longueur de journées dans les cours d'optimisation que je donne dans différents instituts de formation professionnelles...



    Ni l'un ni l'autre : le nombre de lignes (la notion d'enregistrement propre au fichier n'existe pas dans les SGBDR) n'a aucune signification car une ligne peut être composée d'un seul octet ! C'est donc le nombre d'octets lu, traité et rapporté qui est significatif. Or un modèle parfaitement normalisé (donc beaucoup de relations) sera plus performant qu'un modèle mono table...

    A +
    thx

    donc si j ai bien compris : la rapidite d une requete ne va pas dependre du nombre d enregistrement "d'origine" dans la table ni du nombre d'enregistrement retourne par la requete mais du nombre d octets qui compose l'ensemble des enregistrements retournes par la requete .

    ?!?!

  13. #13
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Personne pour confirmer ?

  14. #14
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Dans l'absolu oui !

    A +

  15. #15
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Seth77
    thx

    donc si j ai bien compris : la rapidite d une requete ne va pas dependre du nombre d enregistrement "d'origine" dans la table ni du nombre d'enregistrement retourne par la requete mais du nombre d octets qui compose l'ensemble des enregistrements retournes par la requete .

    ?!?!
    Pour moi, la rapidité d'une requête va aussi dépendre du chemin d'accès choisi par le SGBD.
    Pour les recherches "ouvertes" (de nombreuses lignes répondent aux critères saisis) et si la requête est exécutée sous forme de curseur à l'interieur d'un programme applicatif, il suffit d'éviter de matérialiser la table résultante (la totalité des lignes) et de ne retourner que le nombre de lignes à afficher sur le poste utilisateur. On parle alors d'interrogation paginée.
    Si la table est matérialisée ou si on ne peut pas paginer alors oui dans ce cas là la requête sera lourde à exécuter.

  16. #16
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Rien à voir avec le sujet : le problème est de savoir ce qui rend lent ou rapide une requête. Le fait que le jeu de ligne soit renvoyé en bloc, avec ou sans curseur n'a rien à voir avec le temps mis pour former le jeu des résultats. Après c'est un problème de verouillage éventuel des lignes et de contention potentiel !

    A +

  17. #17
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par SQLpro
    Rien à voir avec le sujet : le problème est de savoir ce qui rend lent ou rapide une requête. Le fait que le jeu de ligne soit renvoyé en bloc, avec ou sans curseur n'a rien à voir avec le temps mis pour former le jeu des résultats. Après c'est un problème de verouillage éventuel des lignes et de contention potentiel !

    A +
    Disons que je raisonnais plutôt au niveau du temps de réponse constaté par l'utilisateur. Si la table résultante n'est pas matérialisée (mais ce n'est pas toujours possible) l'utilisateur a plus rapidement sa réponse (les premières lignes de la table résultante). Encore faut il coder un prédicat de reprise pour obtenir la suite. Dans les architectures transactionnelles à fort débit c'est plutôt le mode de fonctionnement qu'on privilégie.
    Ceci étant, le temps total pour obtenir l'ensemble des résultats sera voisin c'est vrai (voire même supérieur) mais simplement il est fractionné en plusieurs unités de temps élémentaire ...
    Je reconnais aussi bien volontiers que je me suis éloigné de la question d'origine ...

Discussions similaires

  1. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  2. Prob de requete sql et variable
    Par agent-zaizai dans le forum ASP
    Réponses: 11
    Dernier message: 21/10/2003, 16h54
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 16h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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