Procházel jsem log soubor databáze a díval jsem se na dlouho trvající SQL dotazy. Několik jsem jich našel a většinou se shodovaly v jedné drobnosti – přidávaly databázi zbytečnou práci:
1 2 3 | .... t.datum + '30 days'::INTERVAL > now() .... |
O co v tomto případě jde? Dejme sloupec datum typu TIMESTAMP, od informace uložené v tomto sloupci odečítáme interval 30 dnů. Tím jsme znemožnili využít index nad sloupcem datum a také pro každý řádek znovu vyhodnocujeme výraz now().
Jednoduchou změnou lze dotaz znatelně zrychlit a navíc mu umožníme použít index nad sloupcem datum:
1 2 3 | ... t.datum > 'now'::TIMESTAMP - '30 days'::INTERVAL ... |
Také 'now'::timestamp - '30 days'::interval je vyhodnoceno pouze jednou, není třeba znovu počítat pro každé porovnání.