Mysql
 sql >> Base de données >  >> RDS >> Mysql

Clause SQL IN plus lente que les requêtes individuelles

Il s'agit d'une lacune connue de MySQL.

Il est souvent vrai que l'utilisation de UNION fonctionne mieux qu'une requête de plage comme celle que vous montrez. MySQL n'utilise pas les index très intelligemment pour les expressions utilisant IN (...) . Un trou similaire existe dans l'optimiseur pour les expressions booléennes avec OR .

Voir http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ pour quelques explications et repères détaillés.

L'optimiseur est constamment amélioré. Une lacune dans une version de MySQL peut être corrigée dans une version ultérieure. Il vaut donc la peine de tester vos requêtes sur différentes versions.

Il est également avantageux d'utiliser UNION ALL au lieu de simplement UNION . Les deux requêtes utilisent une table temporaire pour stocker les résultats, mais la différence est que UNION applique DISTINCT au jeu de résultats, ce qui entraîne un tri non indexé supplémentaire.