|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : mai 2008 Messages : 260 ![]() |
Bonjour,
J'ai la requete suivante : Code :
SELECT max(DATE_HEURE),NOM_PROJET,REF_TURBINE FROM DATA_10MIN GROUP BY NOM_PROJET,REF_TURBINE Code :
CREATE DESC INDEX I_DATA_10MIN_DT_PRJT_TRBN ON DATA_10MIN (DATE_HEURE, NOM_PROJET, REF_TURBINE); Sur quoi pourrais je créer un index pour que FB s'en serve sachant que le créer sur DATE_HEURE ne sert pas à grand chose car il y a enormement de DATE_HEURE identiques (un enregistrement toutes les 10min par NOM_PROJET et par REF_TURBINE) Merci |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Essayez cet index et dites nous ce qu'il en est : Code sql :
|
||
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : mai 2008 Messages : 260 ![]() |
Bonjour,
Avec cet autre index c'est pareil. Il fait un plan natural |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
C'est pourtant bien l'index qu'il vous faut pour cette requete à mon sens...
n'y a-t-il pas un problème ailleurs dans ce cas ? L'index a-t-il bien été créé ? et surtout : Le plan d'exécution de votre requete a-t-il bien été régénéré suite à la création de cet index ? Essayez de forcer l'utilisation de l'index avec un PLAN / INDEX pour voir si le temps d'exécution est toujours aussi long |
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : mai 2008 Messages : 260 ![]() |
Oui l'index est bien généré.
Si je veux le forcer j'ai l'erreur : index I_DATA_10MIN_PRJT_TRBN_DT cannot be used in the specified plan. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Il y a donc bien un problème avec l'index...
Je n'ai jamais touché a FB, et je ne saurai donc vous en dire plus, mais je peux vous proposer une piste a explorer : Votre index, bien que créé, est peut être en cours de construction en arrière plan, et donc indisponible ?!? FB n'est pas très explicite dans son message d'erreur, ca ne nous aide pas ! |
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Développeur informatique Inscription : octobre 2006 Messages : 435 ![]() |
Il te faut un index sur les deux colonnes utilisées dans le GROUP BY : NOM_PROJET et REF_TURBINE.
Code :
CREATE INDEX DATA_10MIN_IDX1 ON DATA_10MIN (NOM_PROJET, REF_TURBINE);
__________________
Si vous êtes libre, choisissez le Logiciel Libre. |
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
Mais visiblement FB refuse d'utiliser cet index... reste à savoir pourquoi ! |
|
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Développeur informatique Inscription : octobre 2006 Messages : 435 ![]() |
Firebird n'utilise pas d'index sur la fonction MAX.
__________________
Si vous êtes libre, choisissez le Logiciel Libre. |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Effectivement, les index ont l'air capricieux sous FB...
http://tracker.firebirdsql.org/brows...3Aall-tabpanel |
|
|
00
|
|
|
#11 | |
|
Membre régulier
![]() Inscription : mai 2008 Messages : 260 ![]() |
Citation:
|
|
|
|
00
|
|
|
#12 |
|
Membre éclairé
![]() Développeur informatique Inscription : octobre 2006 Messages : 435 ![]() |
Utilise l'index que je t'ai indiqué.
__________________
Si vous êtes libre, choisissez le Logiciel Libre. |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Code :
SELECT max(DATE_HEURE),NOM_PROJET,REF_TURBINE FROM DATA_10MIN GROUP BY NOM_PROJET,REF_TURBINE Pour le tester essayez de créer l'index que vous a donné TryExceptEnd Code :
CREATE INDEX DATA_10MIN_IDX1 ON DATA_10MIN (NOM_PROJET, REF_TURBINE); |
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 213 ![]() |
en fait tant pis, crée quand même un index DESC sur DATE_HEURE
en fait essaie avec ces deux là Code :
CREATE DESC INDEX I_DATA_10MIN_DT_PRJT_TRBN ON DATA_10MIN (DATE_HEURE); Code :
CREATE INDEX I_2 ON DATA_10MIN (NOM_PROJET, REF_TURBINE);
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#15 | |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Citation:
|
|
|
|
00
|
|
|
#16 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 213 ![]() |
oui pardon, fatigue de fin d'année
le seul index possible est Code :
CREATE INDEX I_2 ON DATA_10MIN (NOM_PROJET, REF_TURBINE);
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#17 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
|
|
|
00
|
|
|
#18 |
|
Membre régulier
![]() Inscription : mai 2008 Messages : 260 ![]() |
Je vais tester l'index à mon retour de congés.
Merci à tous et bonnes fêtes |
|
|
00
|
|
|
#19 |
|
Membre régulier
![]() Inscription : mai 2008 Messages : 260 ![]() |
Bonjour et bonne année
Avec cet index c'est 2 fois plus rapide Merci |
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
mis a part que FireBird ne gere pas les index pour un MAX, cela veut dire que FireBird ne sait pas utiliser l'index la ou il utilise pour répondre a une requete ??? Il faudrait donc créer deux index dans une situation ou on aurait deux requetes, l'une qui fait un : et l'autre qui fait un Code sql :
GROUP BY NOM_PROJET, REF_TURBINE, DATE_HEURE ??? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com