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
|
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",
|
"partido" => "SELECT cm.sgpartido, src.ano, SUM(src.valor) as valor",
|
||||||
"uf" => "SELECT cm.siglauf, 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",
|
"cargo" => "SELECT cm.cargo, src.ano, SUM(src.valor) as valor",
|
||||||
@ -117,8 +117,8 @@ namespace OpenCand.API.Services
|
|||||||
{
|
{
|
||||||
return groupBy.ToLower() switch
|
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'",
|
"candidato" => "JOIN mv_candidato_mapping_analytics cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano",
|
||||||
"partido" or "uf" or "cargo" => "JOIN candidato_mapping cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano AND cm.turno = '1'",
|
"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.")
|
_ => throw new ArgumentException("Invalid group by specified.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -147,7 +147,7 @@ namespace OpenCand.API.Services
|
|||||||
if (filter.Ano.HasValue)
|
if (filter.Ano.HasValue)
|
||||||
{
|
{
|
||||||
var paramName = $"ano{++_paramCounter}";
|
var paramName = $"ano{++_paramCounter}";
|
||||||
conditions.Add($"src.ano = @{paramName}");
|
conditions.Add($"cm.ano = @{paramName}");
|
||||||
_parameters[paramName] = filter.Ano.Value;
|
_parameters[paramName] = filter.Ano.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ namespace OpenCand.API.Services
|
|||||||
{
|
{
|
||||||
return groupBy.ToLower() switch
|
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",
|
"partido" => "GROUP BY cm.sgpartido, src.ano",
|
||||||
"uf" => "GROUP BY cm.siglauf, src.ano",
|
"uf" => "GROUP BY cm.siglauf, src.ano",
|
||||||
"cargo" => "GROUP BY cm.cargo, src.ano",
|
"cargo" => "GROUP BY cm.cargo, src.ano",
|
||||||
|
23
db/mv.sql
23
db/mv.sql
@ -67,3 +67,26 @@ GROUP BY
|
|||||||
siglauf,
|
siglauf,
|
||||||
cargo;
|
cargo;
|
||||||
CREATE INDEX idx_mv_receitas_candidato ON mv_receitas_candidato (ano, idcandidato, siglauf, sgpartido, 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