Limitações MySQL Parte 3: Subconsultas

Este é o terceiro post de uma sequência que aborda os limites do MySQL em determinadas circunstâncias. Nesta postagem abordaremos a temática das sub-consultas , que em alguns casos são executadas de fora para dentro ao invés de serem realizadas de fora para dentro como os usuários esperam.

Por Programação Pular para comentários
Limitações MySQL Parte 3: Subconsultas

Este é o terceiro post de uma sequência que aborda os limites do MySQL em determinadas circunstâncias ( como pode ser visto no post 1 e 2). Nesta postagem abordaremos a temática das sub-consultas , que em alguns casos são executadas de fora para dentro ao invés de serem realizadas de fora para dentro como os usuários esperam.

É fácil pegar em subconsultas no MySQL, então eu vou tentar ser gentil. A consulta a seguir irá surpreender desagradavelmente usuários:

select * from a where a.id in (select id from b);


É relativamente simples aplicar as sub-consultas no MySQL, a consulta a seguir irá surpreender de forma negativa os usuários. Usuários esperam a consulta interna a ser executado primeiro, então os resultados a serem substituídos na IN () lista. Mas o que acontece ao contrário, é geralmente uma varredura completa ou verificação de índice de uma tabela, seguido por N consultas à tabela b. Isto é porque MySQL reescreve a consulta para fazer a consulta interna dependente da consulta externa, o que poderia ser uma otimização em alguns casos, mas desotimiza a consulta em muitos outros casos. NOT IN (SELECT ...) consultas executar mal, também.
(Nota: colocar uma lista literal de itens da IN () executa cláusula de multa É apenas quando há um SELECT dentro dele que ele funciona mal..)

Os usuários esperam a consulta interna ser executada primeiro, assim os resultados que serão substituídos na IN () lista. Mas acontece o contrário, geralmente uma varredura completa ou uma verificação de índice de uma tabela, seguido de N consultas à tabela b.

Isto ocorre por que o MySQL reescreve a consulta para poder realizar a consulta interna de forma dependente da consulta externa, o que poderia ser considerado uma otimização em casos específicos, mas diminui esta otimização na maioria dos casos.

NoT IN (SELECT....) também costuma executar de uma forma um pouco negativa as consultas. Colocando uma lista lateral na IN () executando uma cláusula de multa executando quando existe um SELECT dentro dele que funcione mal. A correção para este problema esta em andamento a alguns anos, e um dos engajados nos trabalhos de melhora é o Sergey Petrunia. Mas não está muito claro que o código oferece uma solução completa. Não tem sido mostrado nem um release GA ou RC, por isso não tem grande utilização.

Para ser justo, muitos servidores de banco de dados também têm desempenho sub-consultas muito pobres, isso já deveria ter sido corrigido. E muitos usuários MySQL aprenderam a escrever simplesmente JOINs, por isso gera uma série de limitações.

Compartilhe com seus amigos:
Gregory Laborde
Gregory Laborde Estudante da Licenciatura em Computação Pela Universidade Federal Rural de Pernambuco.Técnico em Tecnologia da Informação. Entusiasta do Software Livre e Palestrante.
FACEBOOK // TWITTER: @gregoryylaborde
Quer conversar com o(a) Gregory, comente:
Carregar comentários
Últimas notícias de Programação
  • Google usa Mulher-Maravilha para ajudar meninas a programar

    Google usa Mulher-Maravilha para ajudar meninas a programar

    Meninas ganham um incentivo extra na hora de aprender a programar, a Mulher-Maravilha.

  • Criando um cadastro de usuário em Java

    Criando um cadastro de usuário em Java

    O objetivo deste artigo é desenvolver uma aplicação em JSE (Java Standard Edition) de inserção de dados utilizando alguns padrões de projeto.

  • Quer aprender PHP? Saiba mais

    Quer aprender PHP? Saiba mais

    Chegou o tão aguardado curso online de PHP do Oficina da Net. Você não pode perder. PHP é uma das linguagens mais usadas no mundo. Os conteúdos que vou mostrar no curso, são exatamente o que você precisa saber para iniciar sua carreira como programador.

  • Formulário de contato em php

    Formulário de contato em php

    Guia do PHP: Aprenda a fazer um formulário em PHP que envia via SMTP autenticado o e-mail para um destinatário.

  • Como fazer um GIF?

    Como fazer um GIF?

    Aprenda a criar um GIF animado de vídeos. Descubra como criar os GIFs, imagens animadas que você vê em na internet.

  • O que priorizar na hora de escolher o hosting para seu site?

    O que priorizar na hora de escolher o hosting para seu site?

    Com o crescimento das ofertas na web, saiba o que você deve levar em consideração na hora de escolher a melhor empresa de hosting para seu empreendimento

  • O que preciso fazer para criar um aplicativo?

    O que preciso fazer para criar um aplicativo?

    Temos visto que desenvolver aplicativos que visam o mercado mobile pode ser mais que uma alternativa rentável, pode colocá-lo no topo, deixá-lo rico. Mas nem tudo são flores, e o aspirante a desenvolvedor de app precisa seguir algumas regras.

  • WEBINAR 3.9

    WEBINAR 3.9

    Venha para o Maker e descubra como tornar o seu negócio mais competitivo.