Por que eu devo ler este artigo:Esse artigo mostra a diferença de performance entre a função MAX e o uso do “ORDER BY coluna DESC LIMIT 1”, ao buscar o maior registro em uma subconsulta. Desmistificaremos qual método de consulta deve ser usado e quando.

A aplicação desse tema é importante para obter performance nas consultas que necessitam buscar o maior registro de uma tabela ou que usem subconsulta como, por exemplo, um relatório em que identifique a última ação de um usuário no sistema ou a última compra realizada. Este artigo explica detalhadamente o que ocorre com cada função usada e como ter um tempo de resposta rápido nas situações analisadas.

Com o volume de informações que os sistemas armazenam, temos que extrair e tentar compreender melhor o que acontece no banco de dados para tomar as melhores decisões. Quando falamos de decisões, estamos falando de um conjunto de informações que são exportadas geralmente em formatos de relatórios ou planilhas. Não é à toa que o relatório se tornou uma das funções mais importantes de um sistema, trazendo com isso a complexidade em buscar as informações gerenciais.

Porém, não basta buscar essas informações, a geração do relatório tem que ser veloz; pois do que adianta tomar a melhor decisão, quando a oportunidade já passou?

Um bom exemplo disso é a bolsa de valores que trabalha com venda e compra de ações, onde uma boa informação tem que ser aproveitada no tempo exato. A consulta aos dados exige uma boa performance.

Cada vez mais as empresas têm investido em performance, principalmente em sistemas da área financeira. Imagine ter que buscar na base dados de um banco a última transação feita por um cliente, sendo que esse cliente usa o cartão todos os dias por mais de 20 anos e possui vários cartões diferentes. Agora, imagine fazer isso para todos os clientes de um banco.

Claro que nesse exemplo existem muitas variáveis que irão influenciar a consulta como o SGBD, o servidor, a infraestrutura, entre outras coisas, mas claro, o SQL é parte importante.

Para entendermos melhor esta importância, iremos construir nesse artigo um cenário mais simples para que fique claro como devemos agir nessa situação: imagine uma empresa que trabalha com um sistema de serviço de atendimento ao cliente (SAC). Nesse sistema são criadas demandas para atender uma reclamação do cliente e cada demanda possui suas movimentações (ações realizadas por usuários).

O cliente deve ter conhecimento da situação atual de sua demanda, ou seja, precisa saber da última movimentação da demanda, além de trazer também as informações da demanda.

Baseado em diversas experiências, será descrito nesse artigo a melhor forma encontrada para se obter uma melhor performance ao consultar o maior registro de uma tabela em subconsulta, onde será levado em conta algumas configurações da tabela para cada resultado. Tudo isso para facilitar a vida dos desenvolvedores.

Usaremos o banco de dados MySQL na versão 5.6.12, o console e o WorkBench 6.0 como ferramenta visual para construir nosso cenário e demonstrar a eficácia da performance. Não vamos abordar como usar as ferramentas citadas para não perder o foco do artigo, por isso parte-se do princípio que o leitor possui esses conhecimentos básicos. Primeiramente, vamos entender como funciona cada função utilizada.

Usando a função MAX

A função MAX no MySQL retorna o maior valor dentre os valores de uma tabela. Sua sintaxe é a seguinte:

MAX (DISTINCT expressão)

Ela aceita uma string como parâmetro, nesse caso será retornado o maior valor de string. Se a cláusula DISTINCT for usada, então será retornado o maior valor entre os valores que não se repetem. Geralmente é usada em consultas com agrupamentos. Quando usada em uma subconsulta, ela serve para obter todas as colunas do maior valor de um registro, mas vamos entender como isso acontece:

...

Quer ler esse conteúdo completo? Seja um assinante e descubra as vantagens.
  • 473 Cursos
  • 10K Artigos
  • 100 DevCasts
  • 30 Projetos
  • 80 Guias
Tenha acesso completo