|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2004 Messages : 56 ![]() |
Bonjour,
J'ai un problème de performance (plus de 10 minutes) sur une jointure, et je pense que ma super optimisé mais la je n'ai plus vraiment d'idée Code :
Et dans la table 2 j'ai 3,000,000 de records En sachant si je fais uniquement le requête ci-dessous cela me retourne 2979 records en moins de 2 secondes Code :
Voila si quelqu'un peut m'aider j'apprécierai beaucoup. Merci par avance. David |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 081 ![]() |
Bonjour,
Quel SGBD ? Quel est le plan d'execution ? Est-ce qu'on peut voir la définition de tes tables, et de indexes ? Tatayo. |
|
|
00
|
|
|
#3 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 443 ![]() |
Première question à se poser : y a-t-il un index sur les colonnes utilisées dans la jointure pour chacune des tables ?
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2004 Messages : 56 ![]() |
je suis sur SQL Server 2008.
Sinon au niveau des index aucun sur la table2 (3 millions de records) et un index sur la table1 sur ID1 et sur d'autres champs que je n'utilise pas sur la requête. J'ai fait le choix de ne pas mettre d'index sur la table2 pour des questions de performance lors de l'insertion cela à un sens ? Pour vous envoyer le plan d'exécution comment je fais? Merci David |
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Votre table2 est une table de travail ?
Si ca n'est pas le cas, quelques index dessus seront les bienvenus. Si c'est effectivement une table de travail, des tests pour savoir ce que vous coute un index lors du vidage / remplissage de celle-ci me sembleraient plus judicieux que de partir tout de suite sur le postulat : un seul index va me foutre en l'air les perfs |
|
|
00
|
|
|
#6 |
![]() ![]() |
Pas d'index sur 3 millions de lignes = requêtes en lecture très lentes !
![]() Avec SQL Server, je ne pense pas qu'il y ait de gros problèmes avec les insertions à cause des index, même avec 3 millions de lignes. Au pire, tu peux désactiver temporairement les index lors des insertions et les réactiver après.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2004 Messages : 56 ![]() |
Je pense que je me complique un peu trop, car après réflexion je ne pense pas qu'il soit nécessaire d’utiliser une autre table.
La structure de ma table est la suivante Entite1 Entite2 Date Valeurs Toto Tata 01/01/2011 300 Tete Toto 01/01/2011 600 Toto Tete 01/01/2011 250 je souhaiterai avoir comme résultat de ma requête Entite Date Valeurs Toto 01/01/2011 550 Tete 01/01/2011 600 Tata 01/01/2011 0 Merci David |
|
|
00
|
|
|
#8 | ||
![]() ![]() |
Votre exemple n'est probablement pas suffisamment précis pour répondre à tous les cas de figure, néanmoins voici une base de départ :
Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#9 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2004 Messages : 56 ![]() |
Merci Fabien pour ta réponse désolé mais je ne comprends pas très bien la 1ère partie de ton code.
Code :
|
||
|
|
00
|
|
|
#10 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Citation:
En effet les index sont nécessaire aussi bien pour les lecture que pour les écritures !!! En effet tout ordre SQL d'écriture commence par une lecture positionnelle pour savoir ou insérer. Sans index vous faites donc une lecture complete de la table à chaque insertion !!!! On se demande parfois ou les gens vont pêcher de telles imbécilités comme mettre des index c'est mal... Que serait une SGBDR sans index ni contraintes ? Un simple fichier Cobol !!!! Maintenant sur l'indexation de ces tables , faites ceci : Code :
ALTER TABLE TABLE2 ADD CONSTRAINT PK PRIMARY KEY (ID2); Code :
CREATE UNIQUE CLUSTERED INDEX X_21 ON TABLE2 (ID2) Code :
CREATE CLUSTERED INDEX X_21 ON TABLE2 (ID2) Code :
CREATE INDEX X_22 ON TABLE2 (SendingParticipant, "Date")
__________________
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
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2004 Messages : 56 ![]() |
Bonjour,
Merci de votre réponse et désolé si mes question sont "très stupides" et de t'avoir énervé ... Par rapport à tes suggestions, je ne pense pas pouvoir utiliser ces colonnes car les valeurs ne sont pas uniques. David |
|
|
00
|
|
|
#12 |
![]() ![]() |
La première partie du code c'est simplement pour simuler votre jeu de données.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#13 |
|
Membre Expert
![]() |
Ton topic est'il résolu?
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com