
SQL – Not IN ou Not EXISTS quando usar?
26 de fevereiro de 2017Instruções SQL Not IN ou Not EXISTS quando usar e quais são as melhores práticas para o desenvolvimento de software de qualidade.
Muitos se perguntam qual o melhor e quando usar NOT IN ou NOT EXISTS, vamos tentar explicar:
- Qual dos dois é melhor quando se considera o desempenho?
- Em quais ocasiões devo usar um e outro?
Vai depender da situação. O not in é recomendado quando você já tem os valores e passa como parametro, por exemplo:
select * from tbl wherenot in (1,3,7)
Recomendamos a leitura: - 14 Hábitos de Desenvolvedores Altamente Produtivos eBook Kindle - Cupom de R$ 100 off no Smartphone Positivo Q20 - Válido somente até 1 de Maio de 2021. - Seleção de Equipamentos para Streaming
Agora se você for fazer um subselect recomendo usar o not exists, pois no primeiro resultado que ele encontrar ele já irá validar e passar para o próximo registro.
select * from user u where not exists (select 1 from player p where p.= u.id limit 1)
Como eu não preciso dos campos da tabela player o retorno 1 fica mais rapido do que *. O limite 1 (muda a forma de escrever de acordo com o banco de dados) vai fazer com que ao encontrar 1 registro já seja o suficiente para dizer que existe. Update: em algumas situações o limit 1 pode deixar mais rápido.
Recomendamos:
Um outro caso:
NOT IN
SQL> select count(*) from emp_master where emp_nbr not in ( select mgr_nbr from emp_master ); COUNT(*) ———-
NOT EXISTS
SQL> select count(*) from emp_master T1 where not exists ( select 1 from emp_master T2 where t2.mgr_nbr = t1.emp_nbr ); COUNT(*) ———- 9
Agora, existem 9 pessoas que não são gestores. Assim, você pode ver claramente a diferença que valores NULL
fazem desde que NULL! = NULL
no SQL, a cláusula NOT IN
não retorna nenhum registro
de volta.
Implicações de desempenho:
Ao usar NOT IN
, a consulta executa varreduras aninhados de tabela, enquanto que para NOT EXISTS
, a consulta pode utilizar um índice dentro da sub-consulta.
Banco de dados
Artigos e dicas sobre banco de dados que você vai gostar:
MongoDB
– Principais diferenças entre MongoDB e MySQL ou outro RDBMS
– Southbank Software apresenta dbKoda: uma ferramenta de desenvolvimento Open Source para MongoDB
MySQL e Instruções SQL em geral
– SQL e Regex – Entenda quando e como usar em instruções SQL
– MySQL – Manter o formato Date e DateTime em formato dd/mm/Year e dd/mm/Year:HH:mm:ss
– SQL – O que são VIEWS SQL, vantagens e desvantagens
– Instrução Insert MySQL e JSON com todos os bancos brasileiros
– PHP e MySQL – Entendendo as codificações iso-8859-1 e UTF-8 e outras
– Como redefinir a senha de root do MySQL ou do MariaDB
– Para que serve uma MySQL Transaction?
– Banco de Dados – Índices desnecessários no banco são um problema?
– Entenda a diferença entre LIKE, IN e BETWEEN no MySQL
– LinkedIn desenvolve a ferramenta MySQL Query Analyzer
– Como otimizar consultas MySQL
– Quando é interessante desnormalizar o banco de dados?
– Entenda Views em SQL, vantagens e desvantagens
– O que é normalização de banco de dados
– Por que não devemos usar funções do tipo mysql_*
– SQL – Entenda as diferenças entre aspas simples e duplas
– SQL – Not IN ou Not EXISTS quando usar?
– SQL – Entendendo JOINS
– PHP Do Zero Ao Profissional – Análise do Curso

