J'ai une grande table Oracle avec une indexation date_time champ: « DISCONNECT_DATE »Comment utiliser le champ indexé Oracle dans une requête
Quand j'utilise ce qui suit where ma requête est exécutée rapidement:
DISCONNECT_DATE > TO_DATE('01-DEC-2016', 'DD-MON-YYYY') AND
DISCONNECT_DATE < TO_DATE('01-JAN-2017', 'DD-MON-YYYY')
quand j'utilise ce qui suit where ma requête est exécutée (très) lentement:
extract(month from disconnect_date) = '12' and
extract(year from disconnect_date) = '2016'
Ils sont à la fois plus ou moins équivalents dans leurs intentions. Pourquoi le premier travail et le dernier pas? (Je ne pense pas avoir ce problème dans SQL Server)
(J'utilise PL SQL Developer pour écrire la requête)
je suppose que Oracle ne peut pas convertir automatiquement à partir de votre deuxième option à la première option, il analyse complète. Il faudrait un cas particulier pour cette optimisation. PS. Ils ne sont pas équivalents sauf si vous changez> à> = –
Je suis confus. Voulez-vous dire que dans SQL Server, les deux versions s'exécutent très rapidement? Je ne sais rien à propos de SQL Server, mais je trouverais cela très surprenant. (Sauf si vous avez déjà des index basés sur des fonctions dans SQL Server, comme Gordon montre dans sa réponse.) – mathguy