melhorando otimizações de dados
This commit is contained in:
parent
4c72a68481
commit
f16e1e5e5d
@ -94,7 +94,7 @@ namespace OpenCand.API.Services
|
||||
{
|
||||
return groupBy.ToLower() switch
|
||||
{
|
||||
"candidato" => "SELECT src.idcandidato, c.nome, src.ano, SUM(src.valor) as valor",
|
||||
"candidato" => "SELECT src.idcandidato, cm.nome, src.ano, SUM(src.valor) as valor",
|
||||
"partido" => "SELECT cm.sgpartido, src.ano, SUM(src.valor) as valor",
|
||||
"uf" => "SELECT cm.siglauf, src.ano, SUM(src.valor) as valor",
|
||||
"cargo" => "SELECT cm.cargo, src.ano, SUM(src.valor) as valor",
|
||||
@ -117,8 +117,8 @@ namespace OpenCand.API.Services
|
||||
{
|
||||
return groupBy.ToLower() switch
|
||||
{
|
||||
"candidato" => "JOIN candidato c ON src.idcandidato = c.idcandidato JOIN candidato_mapping cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano AND cm.turno = '1'",
|
||||
"partido" or "uf" or "cargo" => "JOIN candidato_mapping cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano AND cm.turno = '1'",
|
||||
"candidato" => "JOIN mv_candidato_mapping_analytics cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano",
|
||||
"partido" or "uf" or "cargo" => "JOIN mv_candidato_mapping_analytics cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano",
|
||||
_ => throw new ArgumentException("Invalid group by specified.")
|
||||
};
|
||||
}
|
||||
@ -147,7 +147,7 @@ namespace OpenCand.API.Services
|
||||
if (filter.Ano.HasValue)
|
||||
{
|
||||
var paramName = $"ano{++_paramCounter}";
|
||||
conditions.Add($"src.ano = @{paramName}");
|
||||
conditions.Add($"cm.ano = @{paramName}");
|
||||
_parameters[paramName] = filter.Ano.Value;
|
||||
}
|
||||
|
||||
@ -165,7 +165,7 @@ namespace OpenCand.API.Services
|
||||
{
|
||||
return groupBy.ToLower() switch
|
||||
{
|
||||
"candidato" => "GROUP BY src.idcandidato, c.nome, src.ano",
|
||||
"candidato" => "GROUP BY src.idcandidato, cm.nome, src.ano",
|
||||
"partido" => "GROUP BY cm.sgpartido, src.ano",
|
||||
"uf" => "GROUP BY cm.siglauf, src.ano",
|
||||
"cargo" => "GROUP BY cm.cargo, src.ano",
|
||||
|
23
db/mv.sql
23
db/mv.sql
@ -67,3 +67,26 @@ GROUP BY
|
||||
siglauf,
|
||||
cargo;
|
||||
CREATE INDEX idx_mv_receitas_candidato ON mv_receitas_candidato (ano, idcandidato, siglauf, sgpartido, cargo);
|
||||
|
||||
---
|
||||
--- View for candidate mapping summary
|
||||
CREATE MATERIALIZED VIEW mv_candidato_mapping_analytics AS
|
||||
SELECT DISTINCT cm.idcandidato, c.nome, cm.ano, cm.turno, cm.sgpartido, cm.siglauf, cm.cargo
|
||||
FROM candidato_mapping cm
|
||||
JOIN candidato c ON cm.idcandidato = c.idcandidato
|
||||
WHERE cm.turno = '1';
|
||||
|
||||
CREATE INDEX idx_mv_candidato_mapping_analytics ON mv_candidato_mapping_analytics (idcandidato, ano);
|
||||
|
||||
|
||||
-- Refresh the materialized views to ensure they are up-to-date
|
||||
REFRESH MATERIALIZED VIEW mv_bem_candidato;
|
||||
REFRESH MATERIALIZED VIEW mv_despesas_candidato;
|
||||
REFRESH MATERIALIZED VIEW mv_receitas_candidato;
|
||||
REFRESH MATERIALIZED VIEW mv_candidato_mapping_analytics;
|
||||
|
||||
-- Force re-analyze the materialized views to update statistics
|
||||
ANALYZE mv_bem_candidato;
|
||||
ANALYZE mv_despesas_candidato;
|
||||
ANALYZE mv_receitas_candidato;
|
||||
ANALYZE mv_candidato_mapping_analytics;
|
Loading…
x
Reference in New Issue
Block a user