Ir para o conteúdo

 Voltar a i-Educar De...
Tela cheia

Sobre comparativos like/ilike numéricos

11 de Março de 2014, 14:07 , por Desconhecido - | 1 Pessoa seguindo este artigo.
Visualizado 170 vezes

Prezados,

Eu trabalho no SERPRO e estou internalizando o i-Educar, e estou trabalhando para atualizar a aplicação para as versões mais novas do PostgreSQL. Muitas consultas e stored procedures já não apresentavam problemas, mas o que eu tenho notado que são as coisas mais complicadas são os comparativos de like/ilike em campos numéricos.

Em algumas buscas na aplicação, é permitido preencher somente parte dos campos CEP, CNPJ e CPF. Essa busca por partes é realizada via like (ou, caso queira ignorar a diferença entre maiúsculas e minúsculas, ilike).

Esse tipo de comparativo era permitido no PostgreSQL até a versão 8.2, onde era feito um cast implícito do campo e então era feita a comparação. Porém, like/ilike são comparações muito custosas a nível de banco de dados. Por exemplo, nas versões mais novas do PostgreSQL, é possível se escrever a consulta explicitando o cast, na forma

  > SELECT cpf FROM fisica WHERE text(cpf) like '%207%';

assim fazendo o banco de dados converter todas as linhas nessa coluna para text, e então a comparação via like, assim aumentando consideravelmente o tempo de cada consulta.

Uma alternativa para esta situação seria a criação de um índice de expressões, que funciona como um índice convencional no banco de dados, mas para uma expressão já aplicada nesta coluna. Isto diminui muito o custo da consulta, mas aumenta o custo das inserções.

Por último porém não menos importante, tem a forma que eu implementei para resolver os erros nas buscas do sistema, que envolve um comparativo com =. Ou seja, quando pesquisando CEP, CPF ou CNPJ, somente o número completo retorna algum resultado.

 

Agora para a minha pergunta: Qual seria a refatoração adequada para estas consultas? A criação de um índice de expressões é a que mantém a funcionalidade atual, mas eu sou a favor de uma abordagem mais simples. Como vocês fariam?


Se houver interesse, o que temos feito no SERPRO está disponível no repositório https://github.com/cmsz/ieducar , e eventualmente (quando tivermos uma migração estável do banco de dados) vamos gerar a pull request para o repositório principal.

Autor: Carlos Morais dos Santos


33 comentários

Mapeamento do i-Educar por todo o Brasil

23 de Abril de 2018, 16:31, por Tiago Giusti

A Portabilis, organização que é integrante da comunidade desde 2009 e que atua no papel de mantenedora do projeto, propôs uma renovação de energias, ao final de 2017, para levar o i-Educar ainda mais longe.



Situação atual do lançamento do maior software livre de gestão escolar do Brasil

10 de Abril de 2018, 11:29, por Tiago Giusti

O Coordenador da Comunidade i-Educar e CEO da Portabilis, Tiago Giusti, foi a Brasília, no fim do ano passado, representando a Comunidade i-Educar numa visita ao Ministério do Planejamento para discutir soluções para alguns assuntos de interesse da Comunidade, tais como:



Em 2018, queremos o i-Educar por todo o Brasil

28 de Dezembro de 2017, 23:08, por Tiago Giusti

Esta mensagem é diferente das de retrospectiva dos anos anteriores. Vamos abordar primeiro sobre o futuro, encerrando com um resumo de como foi 2017.



Prefeitura de Criciúma implanta o i-Educar na rede municipal de ensino

20 de Dezembro de 2017, 11:04, por Tiago Giusti

Buscando melhorar o sistema de informações da rede municipal de ensino de Criciúma, a Administração Municipal, através da Secretaria de Educação e da Diretoria de Tecnologia da Informação (TI), implantará um software de gestão de dados nas unidades educacionais. Denominado i-Educar, o sistema aperfeiçoará o armazenamento de dados e auxiliará gestores e professores de Criciúma.



Retrospectiva i-Educar 2016: o que conseguimos realizar?

31 de Dezembro de 2016, 12:00, por Tiago Giusti

Chegamos a mais um 31/12 e é hora de fazermos a retrospectiva da Comunidade i-Educar, como temos feito todos os finais de ano.