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

Uložte data a čas jako čísla

Bylo by mnohem lepší, kdyby data byla uložena jako data. Jejich ukládání jako čísla spíše než řetězce představuje jinou sadu problémů.

Pokud jste absolutně uvízli u dat uložených jako řetězce, abyste umožnili použití indexů ve sloupcích, museli byste převést data, která používáte jako parametry, jako řetězce ve vhodném formátu a pak se spolehnout na skutečnost, že řazení řetězců v tomto konkrétním formátu odpovídá očekávanému pořadí řazení skutečných dat. Pokud někdy porovnáte řetězec s datem nebo číslem, dostanete implicitní konverzi datového typu, která v nejlepším případě povede k problémům s výkonem, protože nelze použít indexy a v nejhorším případě bude generovat nesprávné výsledky nebo chyby.

Za předpokladu, že se vyhnete převodu datových typů, problémy s výkonem pravděpodobně vzniknou ze skutečnosti, že optimalizátor má velké potíže s odhadem mohutnosti, když použijete nesprávný datový typ. Oracle například ví, že mezi 1. 1. 2012 a 1. 1. 2013 je 365 dní (nebo 8760 hodin nebo 525 600 minut). Na druhou stranu existují miliardy možných řetězců mezi „20120101000000“ a „20130101000000“. To může způsobit, že optimalizátor nepoužije index, když chcete (nebo naopak), použije nesprávný druh spojení atd.



  1. Efektivní vytváření posuvu z více modelů kolejnic?

  2. Mysql Ukládání proměnné s výsledkem SELECT CASE

  3. Jak mohu použít YEAR(), MONTH() a DAY() SQL v Doctrine2?

  4. Iterováním řádků druhé tabulky vrátíte sadu výsledků