|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 90 ![]() |
Bonjour,
Je souhaiterais savoir si il est possible de créer un index sur le champs "Date" d'une table mais précisément sur le "trunc(CHAMP_DATE) ". Car mes requetes sont souvent portées sur le trunc de la date. Exemple : Code :
SELECT * FROM CLIENT WHERE trunc(CLIENT_DATE) <= trunc(sysdate-1) |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 440 ![]() |
Code :
CREATE INDEX client_date ON CLIENT (TRUNC(CLIENT_DATE))
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
20
|
|
|
#3 | ||
|
Membre confirmé
![]() Grégoire MARTINIngénieur développement logiciels Inscription : janvier 2011 Messages : 128 ![]() |
Bonjour,
Oui c'est possible ![]() Code :
CREATE INDEX INDX_CLIENT_xx ON CLIENT (TRUNC(CLIENT_DATE)); Code :
__________________
Cordialement. |
||
|
|
20
|
|
|
#4 | |||||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
Code :
|
|||||
|
|
00
|
|
|
#5 | |||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
Pour que votre requête puisse bénéficier de ce nouvel index il faut que la clause where coincide parfaitement avec la définition de cet index Code :
|
|||
|
|
10
|
|
|
#6 | |||
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 90 ![]() |
Merci à tous ça fonctionne, j'ai testé en lançant un plan d'éxecution et je vois bien que l'index est utilisé
Citation:
|
|||
|
|
00
|
|
|
#7 | |||||||||
|
Membre confirmé
![]() Grégoire MARTINIngénieur développement logiciels Inscription : janvier 2011 Messages : 128 ![]() |
Citation:
Code :
Code :
Code :
Code :
__________________
Cordialement. |
|||||||||
|
|
00
|
|
|
#8 | ||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 926 ![]() |
ce n'est pas la bonne approche
au lieu de Code :
Code :
|
||||
|
20
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 440 ![]() |
C'est pour l'égalité où ça ne marche pas ton exemple.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 926 ![]() |
L'égalité de "trunc(date)=hier" est un fait une période entre hier matin et hier soir
Code :
SELECT * FROM CLIENT WHERE CLIENT_DATE < trunc(sysdate) AND CLIENT_DATE >= trunc(sysdate-1) ; |
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 440 ![]() |
Tu avoueras que pour ce cas, c'est moins intuitif comme code.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 926 ![]() |
même sous la torture je n'avouerai rien du tout
![]() ne pas utiliser < et > quand on a un index sur la date est un manque de logique ! |
|
00
|
|
|
#13 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 440 ![]() |
![]() ![]() ![]() ![]() ![]() ![]() non.. toujours pas ? Bon, ça devient vite l'enfer si tu dois coder des IN avec plusieurs dates.. allez, un dernier pour la route :
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#14 | |
![]() ![]() |
Citation:
__________________
Email : http://scr.im/waldar |
|
|
00
|
|
|
#15 | |
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
C'est cela que vous voulez exprimez? |
|
|
|
00
|
|
|
#16 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 926 ![]() |
Mohamed,
Oui, c'est ça le point, si celui qui a conçu l'application a fait du TRUNC(d) sans remarquer que le TRUNC(d) n'employait pas l'index sur la date, alors dans ce cas on pourrait faire un function-based-index sur le trunc. Cependant si l'on écrit soit même l'application, alors pas de trunc et pas de fbi. @McM : l'enfer c'est de devoir tuner avec des fbi des requetes qui durent des heures parceque les developpeurs ont eu la paresse d'écrire leur IN en BETWEEN PS: un bitmap index sur une date sûrement pas! à moins que la date soit toujours le 14 juillet 1789 ou le 1 aout 1291 |
|
00
|
Copyright © 2000-2012 - www.developpez.com