TECNOLOGIA - Performance/Lentidão/Travamentos - Quais recursos avançados de consultas/manipulação de dados (querys) e melhores práticas que podem ser utilizados para melhoria de Performance
Dúvida
Quais recursos avançados de consultas/manipulação de dados (querys) e melhores práticas que podem ser utilizados para melhoria de Performance?
Solução
Importante
- Muitas informações presentes neste artigo são relacionadas a recursos avançados de manipulação de dados dos próprios bancos de dados. Desta forma, caso você possua dúvidas sobre utilização desses recursos, verifique a documentação técnica do banco de dados que você utiliza e, caso você precise de apoio adicional, verifique apoio com o DBA da sua empresa;
- Para ações que remetem a acompanhamento de execução de querys, caso você utilize o sistema no ambiente Cloud, entre em contato com equipe de IT Services;
- As recomendações indicadas neste artigo se aplicam, principalmente, a rotinas personalizadas que manipulam dados na base de dados do sistema. Exemplo: Relatórios, Regras LSP, WebServices customizados.
Abaixo seguem informações sobre recursos avançados de consultas/manipulação de dados (querys) e melhores práticas que podem ser utilizados para melhoria de Performance:
-
Utilizar recursos JOINS para consultas complexas: esse recurso não muda a Performance dos processos, porém esse recurso deixa as consultas mais limpas, facilitando o entendimento das querys e as falhas de ligações entre as tabelas relacionadas;
-
Busca de massa de dados em granularidade alta: quando há necessidade de busca de muitos dados via selects/querys, é importante validar a possibilidade de busca desses dados de uma única vez. Isso permitirá uma melhor performance, pois acessa-se o banco de dados apenas uma vez, ao invés de fazer milhares de selects. Importante lembrar de que deve-se fazer busca dos dados sempre com os filtros necessários de acordo com o que espera-se de retorno. Exemplo: desejo visualizar 10 produtos da tabela de Produtos (E075PRO) e a tabela possui 100.000 registros. Neste cenário, não é correto montar uma query para retornar 100.000 registros, e sim uma query que retorne apenas os 10 registros desejados;
-
Utilização de selects que utilizem colunas já indexadas: é necessário verificar os índices que já estão incluídos nas tabelas/colunas que estão sendo acessadas pelo comando, garantindo que o comando utilize os recursos já indexados dos dados. Para maiores informações sobre índices no banco de dados, verifique o artigo TECNOLOGIA - Performance/Lentidão/Travamentos - O que são índices no processo de comunicação do sistema com o banco de dados.
-
Utilização de cláusulas WHERE incorretamente: é importante que as cláusulas WHERE sejam utilizadas de forma adequada. Exemplo: não faz sentido utiliza um operador IN se a necessidade é encontrar uma dado específico (onde deveria-se utilizar o operador = [igual a]). A utilização de operadores incorretos pode alterar o tipo de busca de dados utilizado, degradando a performance do comando.
-
Função DISTINCT: nunca utilizar função DISTINCT, pois ela causa perda perda de performance e apenas evidencia um comando efetuado de maneira incorreta, que está retornando mais dados do que o esperado;
-
Avaliar plano de execução dos comandos: os planos de execução dos comandos deve ser avaliado com ferramentas adequadas. Exemplo:
- Banco de dados Microsoft SQLServer: pode ser utilizado o Microsoft SQL Server Management Studio;
- Banco de dados Oracle: pode ser utilizado o Oracle SQL Developer;
-
Função MERGE: comando avançado do banco de dados que permite fazer select, update e delete em um único comando. Esse tipo de comando é muito recomendado quando existe grande volume de dados envolvido. Ele é basicamente uma programação em um comando SQL, onde executa-se selects, com base nesses retornos efetua-se a manipulação dos dados, e o retorno posterior ao sistema será apenas a execução final do processo.
- Restrição: não é possível usar essa função diretamente em regra LSP. É necessária a criação de uma StoredProcedure, e essa StoredProcedure poderá ser posteriormente acionada pela regra LSP;
- Sugestão de cenário para utilização dessa função: exportação de grande massa de dados para um sistema terceiro via WebService customizado;
-
Função PIVOT: função utilizada para extrair massas de dados para conferência. É um comando que "gira" colunas em linhas.
-
Restrição: é necessário ficar o range de dados que deseja-se trabalhar;
-
- Função ROW_NUMBER: função que permite dar uma numeração de linha a uma consulta com base em uma cláusula de ordenação de quebra.
- Função RANK e DENSE_RANK: função para extrair uma posição do registro com base em uma cláusula de ordenação.
Observação
Para mais informações sobre o questões relacionadas a Performance/Lentidão/Travamentos do Gestão Empresarial | ERP, consulte o artigo ERP - Performance/Lentidão/Travamentos - Onde é possível encontrar informações diversas sobre questões relacionadas a Performance/Lentidão/Travamentos (índice).