adding otimizações
This commit is contained in:
parent
87a98fefb1
commit
f5dda37285
@ -27,7 +27,7 @@ namespace OpenCand.API.Repository
|
||||
return (await connection.QueryAsync<MaioresEnriquecimento>(@"
|
||||
WITH patrimonio_anual AS (
|
||||
SELECT idcandidato, ano, SUM(valor) AS valor_total_ano
|
||||
FROM bem_candidato
|
||||
FROM mv_bem_candidato
|
||||
GROUP BY idcandidato, ano
|
||||
),
|
||||
extremos_declaracao AS (
|
||||
|
@ -106,9 +106,9 @@ namespace OpenCand.API.Services
|
||||
{
|
||||
return type.ToLower() switch
|
||||
{
|
||||
"bem" => "FROM bem_candidato src",
|
||||
"despesa" => "FROM despesas_candidato src",
|
||||
"receita" => "FROM receitas_candidato src",
|
||||
"bem" => "FROM mv_bem_candidato src",
|
||||
"despesa" => "FROM mv_despesas_candidato src",
|
||||
"receita" => "FROM mv_receitas_candidato src",
|
||||
_ => throw new ArgumentException("Invalid type specified.")
|
||||
};
|
||||
}
|
||||
@ -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",
|
||||
"partido" or "uf" or "cargo" => "JOIN candidato_mapping cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano",
|
||||
"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'",
|
||||
_ => throw new ArgumentException("Invalid group by specified.")
|
||||
};
|
||||
}
|
||||
|
69
db/mv.sql
Normal file
69
db/mv.sql
Normal file
@ -0,0 +1,69 @@
|
||||
-- This script creates materialized views for bem_candidato, despesas_candidato, and receitas_candidato
|
||||
-- Drop existing materialized views if they exist
|
||||
DROP MATERIALIZED VIEW IF EXISTS mv_bem_candidato;
|
||||
DROP MATERIALIZED VIEW IF EXISTS mv_despesas_candidato;
|
||||
DROP MATERIALIZED VIEW IF EXISTS mv_receitas_candidato;
|
||||
|
||||
-- Creation stage
|
||||
---
|
||||
--- MV for bem_candidato
|
||||
CREATE MATERIALIZED VIEW mv_bem_candidato AS
|
||||
SELECT
|
||||
bem_candidato.ano,
|
||||
bem_candidato.idcandidato,
|
||||
candidato_mapping.siglauf as siglauf,
|
||||
candidato_mapping.sgpartido,
|
||||
cargo,
|
||||
SUM(valor) AS valor
|
||||
FROM
|
||||
bem_candidato
|
||||
JOIN candidato_mapping ON bem_candidato.idcandidato = candidato_mapping.idcandidato AND bem_candidato.ano = candidato_mapping.ano AND candidato_mapping.turno = '1'
|
||||
GROUP BY
|
||||
bem_candidato.ano,
|
||||
bem_candidato.idcandidato,
|
||||
candidato_mapping.sgpartido,
|
||||
siglauf,
|
||||
cargo;
|
||||
CREATE INDEX idx_mv_bem_candidato ON mv_bem_candidato (ano, idcandidato, siglauf, sgpartido, cargo);
|
||||
|
||||
---
|
||||
--- MV for despesas_candidato
|
||||
CREATE MATERIALIZED VIEW mv_despesas_candidato AS
|
||||
SELECT
|
||||
despesas_candidato.ano,
|
||||
despesas_candidato.idcandidato,
|
||||
candidato_mapping.siglauf as siglauf,
|
||||
despesas_candidato.sgpartido,
|
||||
cargo,
|
||||
SUM(valor) AS valor
|
||||
FROM
|
||||
despesas_candidato
|
||||
JOIN candidato_mapping ON despesas_candidato.idcandidato = candidato_mapping.idcandidato AND despesas_candidato.ano = candidato_mapping.ano AND candidato_mapping.turno = '1'
|
||||
GROUP BY
|
||||
despesas_candidato.ano,
|
||||
despesas_candidato.idcandidato,
|
||||
despesas_candidato.sgpartido,
|
||||
siglauf,
|
||||
cargo;
|
||||
CREATE INDEX idx_mv_despesas_candidato ON mv_despesas_candidato (ano, idcandidato, siglauf, sgpartido, cargo);
|
||||
|
||||
---
|
||||
--- MV for receitas_candidato
|
||||
CREATE MATERIALIZED VIEW mv_receitas_candidato AS
|
||||
SELECT
|
||||
receitas_candidato.ano,
|
||||
receitas_candidato.idcandidato,
|
||||
candidato_mapping.siglauf as siglauf,
|
||||
receitas_candidato.sgpartido,
|
||||
cargo,
|
||||
SUM(valor) AS valor
|
||||
FROM
|
||||
receitas_candidato
|
||||
JOIN candidato_mapping ON receitas_candidato.idcandidato = candidato_mapping.idcandidato AND receitas_candidato.ano = candidato_mapping.ano AND candidato_mapping.turno = '1'
|
||||
GROUP BY
|
||||
receitas_candidato.ano,
|
||||
receitas_candidato.idcandidato,
|
||||
receitas_candidato.sgpartido,
|
||||
siglauf,
|
||||
cargo;
|
||||
CREATE INDEX idx_mv_receitas_candidato ON mv_receitas_candidato (ano, idcandidato, siglauf, sgpartido, cargo);
|
Loading…
x
Reference in New Issue
Block a user