Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL - Diferença entre IN e EXIST

EXISTE


EXISTS literalmente é para verificar a existência de critérios especificados. No SQL padrão atual, ele permitirá que você especifique mais de um critério para comparação - IE se você quiser saber quando col_a e col_b correspondem - o que o torna um pouco mais forte que a cláusula IN. MySQL IN suporta tuplas, mas a sintaxe não é portátil, então EXISTS é uma escolha melhor tanto para legibilidade quanto para portabilidade.

A outra coisa a ser observada com EXISTS é como ele opera - EXISTS retorna um booleano e retornará um booleano na primeira correspondência. Portanto, se você estiver lidando com duplicatas/múltiplos, EXISTS será mais rápido de executar do que IN ou JOINs, dependendo dos dados e das necessidades.

EM


IN é açúcar sintático para cláusulas OR. Embora seja muito flexível, há problemas em lidar com muitos valores para essa comparação (ao norte de 1.000).

NÃO


O operador NOT apenas inverte a lógica.

Subconsultas x JOINs


O mantra "sempre usar junções" é falho, porque os JOINs correm o risco de inflar o conjunto de resultados se houver mais de um registro filho contra um pai. Sim, você pode usar DISTINCT ou GROUP BY para lidar com isso, mas é muito provável que isso gere o benefício de desempenho de usar um JOIN discutível. Conheça seus dados e o que você deseja para um conjunto de resultados - isso é fundamental para escrever SQL com bom desempenho.

Para reiterar saber quando e por que saber o que usar - LEFT JOIN IS NULL é a lista de exclusão mais rápida no MySQL se as colunas comparadas NÃO são anuláveis , caso contrário, NOT IN/NOT EXISTS são as melhores escolhas.

Referência: