|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
bonjour a tous
j'ai une table qui contient les informations sur une session (Qui, ou et quand) et une table qui contient les détails de cette session (data). Cette table contient une colonne qui indique si l'action a eu lieu le jour de la session ou le lendemain En effet, on peut commencer une session tard dans la nuit (23h00 par exemple et se poursuivre jusqu'au lendemain, disons 03h00 du matin). Aussi le passage d'une jour à l'autre est indiqué par une colonne "DATE_ADD" de la table DATA : * 0 : l'action a eu lieu le même jour que le début de la session * 1 : l'action s'est poursuivit le lendemain du début de la session * ... Afin de pouvoir tenir compte de cela, j'ai plusieurs requêtes qui ont cette structure (dans un but de lisibilité, je l'ai simplifiée au maximum ).Code :
Mais si je utilise la colonne DATE_ADD pour tenir compte de ces passages de jours, ainsi : Code sql :
Le temps d’exécution de celle ci devient très important (environ 10 sec. en utilisant bien les index crées). Le changement majeure intervient dans la lecture de la table N_Data où le nombre de lectures indexées passe de 1500 dans le premier cas a plus de 4 000 000 dans le second. Quelqu'un aurait-il une explication et surtout une solution ? merci d'avance olivier |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 213 ![]() |
c'est quoi le plan dans les deux cas ?
et en écrivant : Code :
WHERE N_session.Date_session = (:Date_in - N_Data.Date_Add)
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#3 | |||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
bonjour Philippe
et merci pour ta réponse ![]() 1 . Avec WHERE N_session.Date_session = :Date_in, le plan d'exécution est : Citation:
2 . Avec WHERE N_session.Date_session + N_Data.Date_Add = :Date_in, il est : Citation:
Citation:
NB : l'écriture de la requête a été simplifiée pour sa lisibilité NB1 : je suis sous 2.5 mais pas toute la dernière version. |
|||
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 213 ![]() |
oui de fait, l'index ne peux pas être utilisé IDX_N_SESSION_DATE
puisque de toute façon, il faut calculer toutes les valeurs de N_session.Date_session + N_Data.Date_Add sauf si N_Data.Date_Add ne peut être négatif (ce qui semble être le cas) du coup il faudrait essayer qq chose du genre : Code :
sinon il faut revoir le modèle et gérer ses dates autrements
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
||
|
00
|
|
|
#5 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Merci philippe
j'ai utilisé ton petit truc je l'ai juste modifié pour limité encore le nombre de possibilité, en considérant qu'il est hautement improbable que quelqu'un puisse travailler non-stop pendant plus de 3 jours ![]() Code :
olivier |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com