sql >> Database >  >> RDS >> Oracle

Hoe een Oracle-query te optimaliseren die to_char heeft in de where-clausule voor datum

Als u een uitvoeringsplan zou genereren voor uw eerste vraag ...

explain plan for 
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 zou zien dat het een volledige tafelscan doet. Dat komt omdat de to_char() voorkomt het gebruik van uw index op CREATE DATE.

Je zegt niet hoe lang het duurde om de resultaten terug te geven toen je liep ...

SELECT bunch,of,stuff,create_date
FROM myTable
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 23:59:59:123000','MM/DD/YYYY HH24:MI:SS.FF')
/

... maar ik verwacht dat het veel dichter bij 0,14 seconden dan 4 minuten was.



  1. Wat is Oracle SQL &PL/SQL? Alles wat een beginner moet weten

  2. Na het importeren van gegevens in PostgreSQL, schendt de dubbele sleutelwaarde de unieke beperking

  3. Is er een foutregistratie wanneer de mysql-query mislukt?

  4. Waarom wordt casten van float naar varchar afgerond in SQL Server?