J'ai une table qui contient environ 49403459
enregistrements.Comment optimiser une requête Oracle qui a to_char dans la clause where pour la date
Je souhaite interroger le tableau sur une plage de dates. dites 04/10/2010
à 04/10/2010
. Cependant, les dates sont stockées dans la table sous le format 10-APR-10 10.15.06.000000 AM
(horodatage).
En conséquence, quand je fais
SELECT bunch,of,stuff,create_date
FROM myTable
WHERE TO_CHAR (create_date,'MM/DD/YYYY)' >= '04/10/2010'
AND TO_CHAR (create_date, 'MM/DD/YYYY' <= '04/10/2010'
je reçois 529
lignes mais en 255.59
secondes! Ce qui est parce que je suppose que je fais TO_CHAR sur chaque enregistrement.
Cependant, quand je fais
SELECT bunch,of,stuff,create_date
FROM myTable
WHERE create_date >= to_date('04/10/2010','MM/DD/YYYY')
AND create_date <= to_date('04/10/2010','MM/DD/YYYY')
puis-je obtenir 0
résultats en 0.14
secondes.
Comment puis-je effectuer cette requête rapidement et obtenir des résultats valides (529
)?
À ce stade, je ne peux pas modifier les index. En ce moment je pense que l'index est créé sur la colonne create_date
.
Comment puis-je convertir les deux plages de dates afin que la première plage de dates soit convertie en horodatage avec tous les 0 et que la seconde soit convertie en horodatage correspondant au dernier horodatage de la date. Si ça a du sens...?
Ce qui suit where va chercher aucun résultat soit:
WHERE
create_date >= to_timestamp('04/10/2010 00:00:00.000000','MM/DD/YYYY HH24:MI:SS.FF')
AND
create_date <= to_timestamp('04/10/2010 00:00:00.000000','MM/DD/YYYY HH24:MI:SS.FF')
merci. J'ai essayé cela mais je n'obtiens pas de résultats. S'il vous plaît voir mon edit – Josh
J'ai édité ma réponse. Je pense que votre deuxième requête est probablement correcte. La première requête vous donne des résultats incorrects. – newdayrising
non ... Je peux interroger la table et voir qu'il y a des enregistrements créés aujourd'hui. .. – Josh