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

Cláusula SQL IN mais lenta que consultas individuais


Esta é uma deficiência conhecida no MySQL.

Muitas vezes é verdade que usar UNION tem um desempenho melhor do que uma consulta de intervalo como a que você mostra. MySQL não emprega índices de forma muito inteligente para expressões usando IN (...) . Existe um buraco semelhante no otimizador para expressões booleanas com OR .

Veja http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ para algumas explicações e benchmarks detalhados.

O otimizador está sendo aprimorado o tempo todo. Uma deficiência em uma versão do MySQL pode ser melhorada em uma versão subsequente. Portanto, vale a pena testar suas consultas em diferentes versões.

Também é vantajoso usar UNION ALL em vez de simplesmente UNION . Ambas as consultas usam uma tabela temporária para armazenar resultados, mas a diferença é que UNION aplica DISTINCT ao conjunto de resultados, que incorre em uma classificação não indexada adicional.