|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 307 ![]() |
Bonjour,
Je m'interroge. Avant, j'avais une DB composée de plusieurs table non-indexée, avec des dates en char(8) et sans clef primaire. J'ai refactorisé toute la DB comme expliqué ici et des requêtes qui prenaient 2 minutes avant en prennent plus de 30 maintenant. Le fait d'avoir des types de données correct et des indexes n'est-il pas sensé améliorer le temps d'exécution des requêtes ? Voici un exemple de requête incriminée ancienne requête Code :
Code :
Bref, je suis un peu perdu... (je précise que je ne suis pas du tout DBA mais que je dois bien m'y coller) |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : août 2009 Messages : 779 ![]() |
Je vous invite à :
- éliminer les GROUP BY pour les remplacer par des DISTINCT quand vous ne faites pas d’agrégation. - remplacer votre UNION par un UNION ALL, étant donné que de toute façon chaque select concerné renvoie des valeurs uniques et que les deux ne peuvent renvoyer une même valeur à cause de la colonne type. - changer le type de la colonne ticket pour y mettre directement un int - supprimer la condition "WHERE qt < 0" dans les deux selects finaux, vu que de toute façon elle est comprise dans les conditions initiales |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 307 ![]() |
Merci beaucoup pour vos remarques.
Cela semble effectivement avoir améliorer certaines choses. La requête ancien format prend maintenant entre 1 et 9 secondes (au lieu de 2 minutes avant). Par contre pour le nouveau format, cela fait 2 minutes que ça tourne et j'attends toujours. Pour info, elle a pris une trentaine de minute cet après-midi. C'est suite à cela que j'ai décidé d'ouvrir cette discussion. Je ne comprends toujours pas pourquoi une table qui, à priori, est sensée est mieux conçue est plus lente. Certes il y a beaucoup plus de lignes dedans mais je pensais que les index étaient sensés contrebalancer cela. Griftou. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : août 2009 Messages : 779 ![]() |
Accessoirement, est-il nécessaire d'opérer le DISTINCT ?
À savoir, y a-t-il dans la table tblTransactions des doublons de valeur du n-uplet (siege, date, caisse, ticket, qt, ca, rab, eanart, carteclient) ? Quelle est la clé primaire de cette table ? Et quels index avez-vous ajoutés ? |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 307 ![]() |
Bonjour,
La clef primaire de cette table est un int auto incrémenté. (vous pourrez trouver la définition complète de la table en suivant le lien de mon premier message). Il est en effet possible que chaque ligne soit un doublon complet. Cela se produit lorsqu'un client achète 2 articles identiques et que la caissière les scanne tous les deux plutôt que d'en scanner un et de mettre la quantité à 2. Et là, c'est le drame... La requête donne des résultats légèrement erroné puisque en cas de doublons, je ne vais avoir qu'une seule fois l'article... Je vais retirer le disctinct pour voir. Sinon pour les index de la nouvelle table, je vous renvoie également au lien de mon premier message ou vous y trouverez leur définition complète. Griftou. EDIT : Pour info, après avoir apporté les modifications proposées, la requête sur l'ancienne table prends environ 3s et la requête sur la nouvelle table prend environ 25 minutes. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : août 2009 Messages : 779 ![]() |
Question : y a-t-il une relation entre caisse et siege ? Si oui (à tout hasard si l'info portée par siege est comprise dans celle portée par caisse), vous pouvez gagner un peu de temps en supprimant une information. Idem pour ticket et caisse (la valeur de ticket est-elle attribuée par caisse/ par magasin / globalement, remise à zéro par date / pas du tout, etc.) ?
En supposant que non pour ces deux questions, je poserai un index sur (eanart, date_dt, caisse, ticket). |
|
|
00
|
|
|
#7 | ||
![]() ![]() |
Votre ancienne modélisation était conceptuellement erronée mais rapide en pratique. En réalité, vous avez créé un partitionning "à la main" sans le savoir.
Votre modélisation est maintenant conceptuellement correcte, mais en pratique lente. Votre index sur l'année n'est probablement pas utilisé : ça dépend de l'historique que vous avez chargé dans votre table : Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#8 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Le partitionnement n'est réellement intéressant qu'à partir du moment ou la table dépasse la capacité d'un disque...
Postez le DDL de vos tables avec les index. Postez les plans de requête. Avec cela nous pourrons vous aider. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#9 | |||||||||||||||||||||
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 307 ![]() |
Citation:
La table : Code :
Code :
Code :
Code :
Code :
Code :
Code :
Code :
Code :
Code :
J'ignore si cela peut avoir son importance mais voici le nombre de lignes actuel de la table tblTransactions : Row count = 64397130 Griftou. |
|||||||||||||||||||||
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 307 ![]() |
Voici les plans d'exécution (estimé et réel).
Griftou. |
|
|
00
|
|
|
#11 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Commencez par créer l'index qu'il souhaite :
Code :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
00
|
|
|
#12 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 307 ![]() |
Je fais cela de suite !!
J'imagine que vous avez pu détecter cela via les plans d'exécution. Cependant, ils restent assez obscures pour moi dans le sens où bon nombre des opérations qui y sont décrites ne me parlent pas. Auriez-vous écrit un article à ce sujet ? Griftou. |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 307 ![]() |
Y a-t-il un moyen d'estimé le temps nécessaire à la création de cet index ?
Cela fait 10 minutes que cela tourne je suis sensé quitter le bureau dans quelques temps (en prenant le portable avec ^^). Est-ce que cela vaut le coup que je laisse le processus tourner ou bien serai-je de toute manière obliger de l'annuler ? Dans ce cas, je crois que le plus tôt sera le mieux... Griftou. EDIT : Ouf, il a finit !!! Je m'en vais tester la requête avec ce nouvel index ! |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 307 ![]() |
Ah bin tout de suite, 2min36s au lieu de plus de 25 minutes, c'est appréciable !!!
Un tout grand merci !!! Je passe le sujet en résolu. Il va falloir que je me pense sur comment savoir s'il faut créer tel ou tel index... |
|
|
00
|
|
|
#15 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Entre nous, venez un jour à mon cours d'optimisation sous MS SQL Server que je donne à Orsys !
http://www.orsys.fr/pdf-auto/pdfCours/SQS.pdf A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#16 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 307 ![]() |
Je réside en Belgique mais j'en toucherai un mot à chef à l'occasion. Peut-être m'autorisera-t-il le "voyage" en note de frais
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com