Evitando erros ao indexar campos timestamp em SQL
Dica publicada em Banco de Dados / Postgres
Evitando erros ao indexar campos timestamp em SQL
Eu tive um grande problema com um campo "timestamp" e que consiste no seguinte: uma função que criei fazia uma busca em várias tabelas e usava como restrição algo como:
to_char(campo_tmp)::date = CURRENT_DATE
E isso me trazia um prejuízo muito grande, pois a consulta durava entre 900ms e 1.400ms.
A dica é a seguinte: ao fazer buscas, principalmente se for um "count(*)" em campos timestamp, veja se são extremamente necessárias, pois se precisar indexá-las terá problemas, já que indexação com funções "to_char" ou "date_trunc" - que necessitam de dados externos como locale - não funcionam. Essas indexações devem ser feitas com dados imutáveis.
A melhor coisa a fazer é separar data e hora em campos diferentes que indexá-los um a um. Assim você evita problemas e ganha muitíssimo em desempenho.
O resultado pra mim foi uma redução de quase 1.400ms para 0.32ms.
to_char(campo_tmp)::date = CURRENT_DATE
E isso me trazia um prejuízo muito grande, pois a consulta durava entre 900ms e 1.400ms.
A dica é a seguinte: ao fazer buscas, principalmente se for um "count(*)" em campos timestamp, veja se são extremamente necessárias, pois se precisar indexá-las terá problemas, já que indexação com funções "to_char" ou "date_trunc" - que necessitam de dados externos como locale - não funcionam. Essas indexações devem ser feitas com dados imutáveis.
A melhor coisa a fazer é separar data e hora em campos diferentes que indexá-los um a um. Assim você evita problemas e ganha muitíssimo em desempenho.
O resultado pra mim foi uma redução de quase 1.400ms para 0.32ms.