Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/05/2011, 09h36   #1
Membre habitué
 
Inscription : mai 2007
Messages : 691
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : mai 2007
Messages : 691
Points : 146
Points : 146
Par défaut optimisation requete avec jointure

bonjour,

Besoin de conseil sur la requete suivante:

Code :
1
2
3
4
5
6
7
8
9
 
SELECT 
    achat.acnoachat,
    achat.acdatachat,
    achat.acetat,
    fournisseur.fonom
FROM fournisseur
   INNER JOIN achat ON (fournisseur.foidfour = achat.acidfour)
WHERE achat.acetat = 2
cette requete s'exécute très rapidement (50ms)

par contre si je rajoute à la fin une condition de tri

Code :
1
2
3
4
5
6
7
8
9
10
select 
    achat.acnoachat,
    achat.acdatachat,
    achat.acetat,
    fournisseur.fonom
from fournisseur
   inner join achat on (fournisseur.foidfour = achat.acidfour)
where achat.acetat = 2
order by  achat.acnoachat
le temps d'éxécution passe à pratiquement 3 secondes !!

Est ce normal? Je précise que le champ de tri (achat.acnoachat) est bien indexé et que la table achat contient 60000 enregistrements.

voici le plan:
Code :
1
2
 
PLAN SORT (JOIN (FOURNISSEUR NATURAL, ACHAT INDEX (FK_ACHAT_1, ACHAT_IDX2)))
je trouve bizarre que "FOURNISSEUR NATURAL" alors que les champs de jointure sont bien indéxés


Cordialement
looping est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 08h12   #2
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 612
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 612
Points : 4 512
Points : 4 512
bonjour,

et si tu changeais l'ordre des tables ? et donc de la jointure

Code :
SELECT .... FROM ACHAT JOIN FOURNISSEUR  ...
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/05/2011, 20h36   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Créez les deux inex suivants :
Code :
1
2
CREATE INDEX X_123 ON achat (acetat, acidfour, acnoachat, acdatachat);
CREATE INDEX X_456 ON fournisseur (foidfour, fonom)
Et dites moi si cela a divisé par 10, 100 ou 1000 les temps de réponse....

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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h35   #4
Membre habitué
 
Inscription : mai 2007
Messages : 691
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : mai 2007
Messages : 691
Points : 146
Points : 146
Par défaut index

Bonjour,

En supprimant l'index sur le champ "acetat" (bad index selon IBexpert),
la requete s'execute dans un temp normal

merci
looping est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h47.


 
 
 
 
Partenaires

Hébergement Web