turicas / brasil.io

Backend do Brasil.IO (para código dos scripts de coleta de dados, veja o link na página de cada dataset)

Home Page:https://brasil.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Alterar código de importação para não criar índices desnecessários

turicas opened this issue · comments

A estratégia de criar índices para os campos filtráveis é "burra": ela cria para todos os campos individualmente, mas também para todos os campos usados na ordenação. Caso algum campo filtrável esteja na ordenação, não é necessário criar um índice específico para ele.

Identifiquei essa possível otimização ao analisar as sugestões do pghero:

  • On data_cursosprouni_cursos, idx_cursosprouni_fe306b4b2c077 (nome) is covered by idx_cursosprouni_od3e3381027c5 (nome, uf_busca, cidade_busca, universidade_nome, campus_nome)
  • On data_cursosprouni_cursos, idx_cursosprouni_f78f2985918bf (uf_busca) is covered by data_cursosprouni_cursos_uf_busca_turno_idx (uf_busca, turno)
  • On data_documentosbrasil_documents, data_docume_documen_41950f_idx (document_type) is covered by data_documentosbrasil_documents_document_type_name_idx (document_type, name)
  • On data_eleicoesbrasil_votacoes, idx_eleicoesbras_fc6c9819529ca (nome_urna_candidato) is covered by data_eleicoesbrasil_votacoes_nome_urna_candidato_numero_can_idx (nome_urna_candidato, numero_cand)
  • On data_empresassocias_socias, idx_empresassocias_qualificacao_socia (qualificacao_socia) is covered by idx_core_empresassocias_qualificacao_socia (qualificacao_socia)
  • On data_gastosdiretos_gastos, idx_gastosdireto_fe0721c53ab67 (codigo_favorecido) is covered bydata_gastosdiretos_gastos_codigo_favorecido_data_pagamento_idx (codigo_favorecido, data_pagamento)
  • On data_salariosmagistrados_contracheque, idx_salariosmagi_f70802b3f557b (tribunal) is covered by idx_salariosmagi_o86ac8a5b14d8 (tribunal, nome)
  • On data_sociosbrasil_cnaecnpj_elzeitjm, idx_sociosbrasil_f2ec2c25ba0db (cnpj) is covered by idx_sociosbrasil_oa6366e6c6214 (cnpj, cnae)
  • On data_sociosbrasil_empresa_nxkxlrgx, idx_sociosbrasil_fb3bc6f3331e5 (uf) is covered byidx_sociosbrasil_oa73d9c7b35ea (uf, municipio, razao_social)
  • On data_sociosbrasil_empresas_lrnksjxe, idx_sociosbrasil_fd3d045dcb8e8 (uf) is covered byidx_sociosbrasil_o1a7ba4fece09 (uf, razao_social)
  • On data_sociosbrasil_holding_pjhdhywv, idx_sociosbrasil_fd02794affacc (holding_cnpj) is covered byidx_sociosbrasil_o178b56771e22 (holding_cnpj, cnpj)
  • On data_sociosbrasil_holdings_vxxovcxf, idx_sociosbrasil_fd2ceecf5aa7a (razao_social) is covered by idx_sociosbrasil_o343f79449be6 (razao_social, razao_social_socia)
  • On data_sociosbrasil_socio_rmwfajgx, idx_sociosbrasil_f285bcb2e105f (cnpj) is covered by idx_sociosbrasil_odb4498752cb3 (cnpj, nome_socio)
  • On data_sociosbrasil_socios_bwpphpfz, idx_sociosbrasil_f179cedc8b8f8 (razao_social) is covered by idx_sociosbrasil_o5af425f2eb85 (razao_social, nome_socio)

Além disso, existem índices na coluna id sendo criados de maneira duplicada:

  • On data_eleicoesbrasil_bemdeclarado_utljumnm, idx_eleicoesbras_ocf29e9928ffb (id) is covered by data_eleicoesbrasil_bemdeclarado_utljumnm_pkey (id)
  • On data_eleicoesbrasil_candidatura_tnfesegv, idx_eleicoesbras_o9227d80e6483 (id) is covered by data_eleicoesbrasil_candidatura_tnfesegv_pkey (id)
  • On data_eleicoesbrasil_filiacao_hsrdcdhp, idx_eleicoesbras_o6f1d804c1023 (id) is covered by data_eleicoesbrasil_filiacao_hsrdcdhp_pkey (id)
  • On data_eleicoesbrasil_filiacao_ltuifppp, idx_eleicoesbras_oc4b19f9a950f (id) is covered by data_eleicoesbrasil_filiacao_ltuifppp_pkey (id)
  • On data_eleicoesbrasil_socio_dyugghan, idx_eleicoesbras_o98995a612009 (id) is covered by data_eleicoesbrasil_socio_dyugghan_pkey (id)

Com essa alteração, economizaremos um pouco de espaço em disco.

Para implementar a otimização, será necessário:

  • Trocar esse if, para não incluir campos que já estão na ordenação
  • Caso ordering == ["id"], esse índice não deve ser criado