sql >> Databáze >  >> RDS >> Oracle

Jak optimalizovat dotaz Oracle, který má v klauzuli where pro datum to_char

Pokud byste vygenerovali plán provádění pro váš první dotaz ...

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

... viděli byste, že to provádí úplné skenování tabulky. Je to proto, že to_char() zabraňuje použití vašeho indexu v CREATE DATE.

Neříkáte, jak dlouho trvalo vrátit výsledky, když jste běželi ...

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

... ale očekávám, že to bylo mnohem blíže k 0,14 sekundy než 4 minutám.



  1. Vyhledávání databázových objektů a dat tabulek na serveru SQL

  2. Jak zjistit, kdy byla v Oracle vytvořena konkrétní tabulka?

  3. Chyba? #1146 – Tabulka 'xxx.xxxxx' neexistuje

  4. Jak mohu vybrat nejdelší textové pole při použití GROUP BY v mysql, a la MAX()?