sql >> Databasteknik >  >> RDS >> Oracle

Hur man optimerar en Oracle-fråga som har to_char in where-klausul för datum

Om du skulle generera en exekveringsplan för din första fråga ...

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'
/

... du skulle se att den gör en fullbordsskanning. Det beror på att to_char() förhindrar användningen av ditt index på CREATE DATE.

Du säger inte hur lång tid det tog att returnera resultaten när du körde ...

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')
/

... men jag förväntar mig att det var mycket närmare 0,14 sekunder än 4 minuter.



  1. Infogar du flera rader i en enda SQL-fråga?

  2. MySql bärbar version

  3. Skickar värden till infogningsfrågan med väljfråga

  4. codeigniter aktiva poster förena med att använda?