une addition dans la clause where : pb d'index ?
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 :ccool:).
Code:
1 2 3 4
| SELECT N_data.Id_data_princ
FROM N_data
INNER JOIN N_session ON (N_session.Id_session = N_data.Id_session)
WHERE N_session.Date_session = :Date_in |
l’exécution de cette requête est très rapide (quelques ms).
Mais si je utilise la colonne DATE_ADD pour tenir compte de ces passages de jours, ainsi :
Code:
1 2 3 4
| SELECT N_data.Id_data_princ
FROM N_data
INNER JOIN N_session ON (N_session.Id_session = N_data.Id_session)
WHERE N_session.Date_session + N_Data.Date_Add = :Date_in |
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