"J'ai une requête comportant ça dans la clause WHERE :
REF.ECCO_DATE_IMPUTATION >= TIMESTAMP'2019-01-01 00:00:00.000000' AND REF.ECCO_DATE_IMPUTATION <= TIMESTAMP'2019-01-31 23:59:59.999999'
La colonne ECCO_DATE_IMPUTATION est de type DATE. Les performances sont mauvaises sous Oracle car l'index sur la colonne n'est pas utilisé alors que le critère est excellent. Comment faire pour avoir une syntaxe commune et des perfs correctes avec Oracle et PostgreSQL ?"
Réponse :
L'index sur la colonne n'est pas utilisé avec Oracle car une conversion implicite est appliquée sur la colonne REF.ECCO_DATE_IMPUTATION pour transformer la colonne DATE en TIMESTAMP. L'idéal est de comparer des DATE avec des DATE, des TIMESTAMP avec des TIMESTAMP.
Une écriture possible OK avec Oracle et PostgreSQL peut être :
Code : Tout sélectionner
REF.ECCO_DATE_IMPUTATION >= DATE'2019-01-01' AND REF.ECCO_DATE_IMPUTATION < DATE'2019-02-01'
Code : Tout sélectionner
REF.ECCO_DATE_IMPUTATION >= TIMESTAMP'2019-01-01' AND REF.ECCO_DATE_IMPUTATION < TIMESTAMP'2019-02-01'