Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
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 23/12/2010, 11h21   #1
Membre du Club
 
Nicolas
Ingénieur développement logiciels
Inscription : décembre 2006
Messages : 111
Détails du profil
Informations personnelles :
Nom : Nicolas
Localisation : Espagne

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : décembre 2006
Messages : 111
Points : 57
Points : 57
Par défaut Problemes avec des tables de liens - Cles secondaires

Bonjour à tous et joyeux noël,

j'ai créé une base de données relativement complexe où les tables sont interconnectés avec des tables de liens.
ça marche bien, sauf que c'est parfois lent.
Il paraît qu'utiliser des clés secondaires pourrait accélérer le process. Comment s'en servir? Dois-je définir les deux colonnes des tables de liens comme secondaire?
Pour info, j'appelle table de liens les tables telles que:
Table de lien "Employé_Entreprise"
ID Employe_ID Entreprise_ID
1 1 2
2 2 3

Table "Employé"
ID Nom etc.
1 Martin
2 Dupuis

Table "Entreprise"
ID Nom Adresse
1 IBM
2 Oracle
3 CSC

Left joint etc... pour avoir la liste des employés dans chaque entreprise.

Merci d'avance,

Nicolas
Nico820 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 11h48   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonjour,

Vous n'avez pas dit si vous aviez des index sur les tables concernees ?

Table "Employé" --> indexs ?
Table "Entreprise" --> indexs ?
Table de lien "Employé_Entreprise" --> indexs ?

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 12h41   #3
Membre du Club
 
Nicolas
Ingénieur développement logiciels
Inscription : décembre 2006
Messages : 111
Détails du profil
Informations personnelles :
Nom : Nicolas
Localisation : Espagne

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : décembre 2006
Messages : 111
Points : 57
Points : 57
j'ai pas d index...
les IDs sont des clés primaires.
Nico820 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 13h10   #4
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Il faut donc commencer par en mettre sur les cles etranges de votre table d'association (table de lien)

Table de lien "Employé_Entreprise" --> index sur Employe_Id et index sur Entreprise_ID

Lorsque vous ferez vos jointures vous aurez deja plus de performances.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 16h59   #5
Membre du Club
 
Nicolas
Ingénieur développement logiciels
Inscription : décembre 2006
Messages : 111
Détails du profil
Informations personnelles :
Nom : Nicolas
Localisation : Espagne

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : décembre 2006
Messages : 111
Points : 57
Points : 57
merci beaucoup pour votre aide .
Dernière question pour comprendre tout ça: il vaut mieux faire un index par référence dans la table de liens ou faire un seul index pour les deux références?
Je cherche à avoir des queries les plus rapides possible
Nico820 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 17h14   #6
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 138
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 138
Points : 2 466
Points : 2 466
Envoyer un message via Yahoo à zinzineti
Citation:
Envoyé par Nico820 Voir le message
merci beaucoup pour votre aide .
Dernière question pour comprendre tout ça: il vaut mieux faire un index par référence dans la table de liens ou faire un seul index pour les deux références?
Je cherche à avoir des queries les plus rapides possible
Fais le test dans ton environnement avec les 2 cas que tu évoques et tu pourras déduire toi-même ce qui est mieux dans ton cas
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 17h42   #7
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
a première vue, je dirai :

un index (Employe_ID, Entreprise_ID)
et
un index (Entreprise_ID, Employe_ID)

mais tout dépend de tes requêtes.
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 18h33   #8
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Citation:
un index (Employe_ID, Entreprise_ID)
et
un index (Entreprise_ID, Employe_ID)
En plus des indexes sur les clés étrangères ?

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 10h00   #9
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par mikedavem Voir le message
Table de lien "Employé_Entreprise" --> index sur Employe_Id et index sur Entreprise_ID
...
Citation:
Envoyé par Nico820 Voir le message
Dernière question pour comprendre tout ça: il vaut mieux faire un index par référence dans la table de liens ou faire un seul index pour les deux références?
Je cherche à avoir des queries les plus rapides possible
Citation:
Envoyé par mikedavem Voir le message
En plus des indexes sur les clés étrangères ?
Non, je me suis mal exprimé. En fait pour mieux répondre a sa question, s'il veut inclure les deux colonnes dans son index, il devra créer deux index quand même et non pas un seul comme il l'évoque. (oui je sais ca ne répond pas a la question mais j'approuve le :
Citation:
Envoyé par zinzineti
Fais le test dans ton environnement avec les 2 cas que tu évoques et tu pourras déduire toi-même ce qui est mieux dans ton cas
)

car sa dépend de la fréquence des insertions, du type des requêtes de sélection,... bref de ses besoins
aieeeuuuuu 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 08h30.


 
 
 
 
Partenaires

Hébergement Web