|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() |
Bonjour,
Je me retrouve dans un cas qui ne s'était jamais présenté à moi et que je ne peux pas tester maintenant. J'aurai besoin d'une estimation de votre part sur le temps que peut prendre une requête (assez optimisée). Voici les données : - Jointures sur 7-8 tables - 3 requêtes imbriquées - des index sur les clef primaires - 200 000 enregistrements environt - le retour comportera une centaine de lignes, dont on aura une quinzaine de champs, répartis sur les différentes tables qu'on a dans les jointures Je sais parfaitement qu'il est impossible de prédire le temps d'execution à partir de ces données, mais d'après vous, quelle temps à peu pres cela peut-il prendre ? 10 secondes ? une minute ? 2 minutes ? A vrai dire j'en ai aucune idée. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
... c'est comme le fût du canon: un certain temps
qui va dépendre aussi des index positionnés sur les colonnes utilisées dans les WHERE (et peut-être aussi GROUP ?, me souviens plus et du taux de désorganisation des tables.
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() |
Les index il n'y en a que sur les id.
Dans le where il n'y aura que des champs=qqch ou champ n'a pas d'index. et admettons que les tables soient toutes fraîches, donc bien organisées. Est-ce que ça peut donner une meilleure idée ? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
A priori, non, et je doute que tu puisses obtenir un résultat sérieux qui résiste à l'analyse du "comment il a été obtenu".
En vrac, et au delà de la seule base, il y a aussi le SGBD qui est à considérer, et au delà de lui, le serveur: est-il dédié ? quelle est/sera sa puissance ? sa capacité RAM ? Quelle rapidité des HD ? quelle typologie réseau ? (accès direct en LAN ou passage par un WAN, débit théorique/pratique, Qos (paquets perdus ?), etc... bref, à moins d'avoir des dons particuliers, la tâche est impossible Le seul "truc" sera de faire un benchmark à 10% de remplissage de la base, puis tenter d'extrapoler le résultat, mais c'est pas fiable à 100% car le SGBD peut décider de changer son mode d'accès aux données (d'où l'utilité d'un suivi de tuning des bases avec les fameux explains afin de vérifier la pertinence des index par rapport aux requètes qu'ils sont censés améliorer).
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : février 2006 Messages : 118 ![]() |
Le nombre de lignes retournées et le nombre d'attributs du Select je crois que ça n'a que très peu d'influence.
Tu dis faire 7 jointures mais quelle est la taille des tables? Si elles font toutes 200 000 lignes c'est plus long que si y'a une table de 200 000 et 6 de 5000 lignes. Quoiqu'il en soit je pense que ça restera en dessous des 10 secondes. Au hasard je dirais 4.5 secondes. Je sais pas si tu sais ce que c'est un index mais s'ils sont bien fait ça doit permettre à la base de données de sélectionner une ligne (parmi 200 000) en 15 tentatives, ce qui se fait très vite. Ce que je peux te dire par exemple c'est que sélectionner une ligne parmis 20 000 lignes c'est instantané sur un P3 500mb (bon ok peut-être 1/4 secondes j'ai jamais compté). |
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() |
Je ne peux malheureusement rien changer dans la base. Les index sont ce qu'ils sont et le resteront.
En fait mon problème se résume à ceci : je dois aller voir un peu tout ce qu'il y a dans la base afin de compter certaines choses et d'extraire certains champs. 2 solutions donc : - Je parcours tout comme un bourrin, et je fais le tri en programmation (JAVA). - Je fais des requêtes bien spécifiques qui me retourneront exactement ce que je veux. Mais certaines requêtes seront presques semblables. La 2ème solution semble bien entendu la meilleure. Mais les requêtes devront être optimisées au top. Après réflexion, je pars sur la 2ème. |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Je ne comprends pas ce qui peut empêcher l'ajout d'index...
Il ne s'agit pas de mettre le modèle par-terre, juste d'améliorer les performances. Si le proprio de la base comprend ça, c'est gagné, et je ne connais pas de responsable qui "cracherait" sur un gain de 50% en temps de réponse
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 096 ![]() |
Pour moi, il faut coder la requête et demander au SGBD (c'est lequel d'ailleurs ?) qu'il indique les chemins d'accès choisis (en DB2, par exemple ça s'appelle la fonction EXPLAIN).
Ce n'est qu'à partir de cet élément de base qu'on peut raisonnablement donner une estimation crédible. Citation:
|
|
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() |
Je n'ai pas de SGBD en particulier. ça DOIT être portable. Donc il faut que j'optimise les choses optimisables indépendamment du SGBD.
Finalement pour les index, ça pourra se faire. J'avoue que je ne sais pas vraiment quoi indexer. Si j'ai bien compris, pour des perfs optimale, il faudrait que ce soit les champs qui servent aux jointures qui soient indexés ? |
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 096 ![]() |
Citation:
On peut tout à fait écrire du SQL portable et c'est même plutôt sympathique comme idée mais à un moment ou un autre il faut bien "incarner" la requête sur un SGBD donné ... De plus et comme je l'indiquais les SGBD disposent de cette fonction de détermination des chemins d'accès. Citation:
On peut éviter les index: - sur les petites tables là ça veut dire que la performance n'est pas un problème vu la volumétrie - si les colonnes en cause si elles sont peu sélectives là c'est pas forcément une bonne nouvelle car ça veut simplement dire que la présence d'un index n'améliore pas de manière significative la performance qui n'est pas terrible au départ |
||
|
|
00
|
|
|
#11 | |
|
Membre éclairé
![]() |
Citation:
En tout cas merci pour les infos. |
|
|
|
00
|
|
|
#12 | |
![]() ![]() ![]() |
Citation:
__________________
Découvrez la FAQ de MS SQL Server. La chance accorde ses faveurs aux esprits avertis ! |
|
|
|
00
|
|
|
#13 | |||
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 096 ![]() |
Citation:
Pour moi une clé primaire au niveau du MLD/MPD se traduira au niveau du DDL par la création d'un ordre tel que (exemple tiré de DB2 for z/OS que je connais) : Code :
|
|||
|
|
00
|
|
|
#14 |
|
Invité(e)
Messages : n/a ![]() |
A vue de nez et d'après expérience professionnelle ça risque de ramer pas mal si tu as 200.000 enregistrements et surtout des jointures...
Faut s'attendre à des temps de traitements supérieurs à 5 min. Maintenant c'est une estimation qui tient qu'à moi. J'ai surement tout faux en disant-cela Faut voir le serveur , les performances du SGBD... Solution : faire des procédures SQL et apprendre PL-SQL sous Oracle ou Transact-SQL sous SQL-Server par exemple .Sous MySQL on peut faire des scripts en C pour optimiser je crois Mais c'est pas portable |
00
|
|
|
#15 |
![]() ![]() ![]() |
Il y'a un article de sqlpro sur l'optimisation des performances.
__________________
Découvrez la FAQ de MS SQL Server. La chance accorde ses faveurs aux esprits avertis ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com