|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() Inscription : mars 2002 Messages : 119 ![]() |
Voila j'ai une requête que voici
Code :
Lorsque je fais avec ibexpert j'ai un message comme ceci que je ne comprend pas Code :
Merci
__________________
Mika www.usargancy.net |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
cela veut dire que pour la table agents, il n'y a pas d'index efficace disponible et que donc le moteur scan toute la table dans l'ordre naturel, c'est à dire l'ordre dans lequel les enregistrements sont stockés sur disque
un index sur agents.agent_societe devrait pouvoir améliorer les choses
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : mars 2002 Messages : 119 ![]() |
Merci de ce message, je vais de suite le tester
__________________
Mika www.usargancy.net |
|
|
00
|
|
|
#4 | ||
|
Membre habitué
![]() Inscription : mars 2002 Messages : 119 ![]() |
J'ai essayé cela prend maintenant 6 secondes
Voici mes tables Code :
Merci
__________________
Mika www.usargancy.net |
||
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
surement oui
mais pour cela, il faut un peu plus de précision sur pourquoi par exemple avoir choisit DOUBLE PRECISION pour les champs numérique et avoir les statistiques de la base en ce qui concerne les index par contre un petit truc : éviter d'utiliser l'extension .GDB sous Windows, cela cause des ralentissement du fait du system restore de Windows autre chose c'est Firebird qui est utilisé ?, si oui quelle version ? sur les index on peut déjà dire que certains sont inutiles car il font double emploi : CREATE INDEX AGENTS_MATRICULE ON AGENTS (AGENT_MATRICULE, AGENT_NOM, AGENT_PRENOM); CREATE INDEX AGENTS_NOM ON AGENTS (AGENT_NOM, AGENT_PRENOM); CREATE INDEX AGENT_MATRICULE ON AGENTS (AGENT_MATRICULE); CREATE INDEX AGENT_NOM ON AGENTS (AGENT_NOM, AGENT_PRENOM); le premier des 4 suffit : CREATE INDEX AGENTS_MATRICULE ON AGENTS (AGENT_MATRICULE, AGENT_NOM, AGENT_PRENOM);
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#6 |
|
Membre émérite
![]() Ingénieur développement logiciels Inscription : février 2005 Messages : 682 ![]() |
Bonjour,
Le premier suffit ? Je me suis laissé dire (et je l'ai vérifié par test à l'époque avec IB 5) qu(il valait mieux avoir trois index sur chacun des champs plutôt que un sur les trois. Ainsi : CREATE INDEX AGENTS_NOM ON AGENTS (AGENT_NOM); CREATE INDEX AGENT_MATRICULE ON AGENTS (AGENT_MATRICULE); CREATE INDEX AGENT_PRENOM ON AGENTS (AGENT_PRENOM); serait meilleur que CREATE INDEX AGENTS_MATRICULE ON AGENTS (AGENT_MATRICULE, AGENT_NOM, AGENT_PRENOM); Cela offrirait plus de possibilité et surtout éviterait les erreurs d'interprétation de l'optimiseur qui prendrait en compte le nom du premier champ et la profondeur de l'index. Par exemple : select .. from ... where AGENT_MATRICULE = 'toto' and AGENT_NOM = 'titi' and AGENT_PRENOM ='tutu' utilserait le même index que pour select .. from ... where AGENT_MATRICULE = 'toto' and AGENT_NOM = 'titi' and AGENT_VILLE ='Paris' et ce même si CREATE INDEX AGENTS_MATRICULE ON AGENTS (AGENT_MATRICULE, AGENT_NOM, AGENT_VILLE); existe. J'utilise le conditionnel car je n'ai pas refait les tests depuis IB 5.0.742.
__________________
Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle. Aymond d'Alost |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
des index sur un seul champ auront forcément une plus faible sélectivité et donc seront moins efficaces
par contre c'est vrai que si tu as un index (A,B) il sera utilisé pour une order by sur A, sur A,B (pas B,A), une recherche sur A, mais pas sur B, tu as raison sur ce point maintenant, les index on un coût, donc tout dépend des recherches et tris utilisés dans l'exploitation de la base donc j'ai causé un petit peu vite donc plutot que : CREATE INDEX AGENTS_MATRICULE ON AGENTS (AGENT_MATRICULE, AGENT_NOM, AGENT_PRENOM); CREATE INDEX AGENTS_NOM ON AGENTS (AGENT_NOM, AGENT_PRENOM); CREATE INDEX AGENTS_SOCIETE ON AGENTS (AGENT_SOCIETE, AGENT_MATRICULE); CREATE INDEX AGENT_MATRICULE ON AGENTS (AGENT_MATRICULE); CREATE INDEX AGENT_NOM ON AGENTS (AGENT_NOM, AGENT_PRENOM); à priori il vaut mieux : CREATE INDEX AGENTS_MATRICULE ON AGENTS (AGENT_MATRICULE, AGENT_NOM, AGENT_PRENOM); CREATE INDEX AGENTS_NOM ON AGENTS (AGENT_NOM, AGENT_PRENOM); je supprime l'index AGENTS_SOCIETE car c'est déjà celui de la clé primaire crée avant
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
Copyright © 2000-2012 - www.developpez.com