Maison >base de données >tutoriel mysql >Quand devriez-vous choisir CROSS APPLY plutôt que INNER JOIN pour des performances optimales ?
CROSS APPLY vs INNER JOIN : Quand CROSS APPLY brille-t-il ?
Bien que INNER JOIN
soit la solution idéale pour la plupart des relations un-à-plusieurs, CROSS APPLY
offre des avantages significatifs en termes de performances dans des situations spécifiques.
Avantage clé de CROSS APPLY :
Contrairement à INNER JOIN
, CROSS APPLY
n'impose pas de fonction définie par l'utilisateur (UDF) pour la table de droite. Cette différence apparemment minime devient critique lors de la gestion de grands ensembles de données nécessitant un partitionnement ou une pagination.
Supériorité en matière de partitionnement et de pagination :
Bien que de simples requêtes utilisant INNER JOIN
et CROSS APPLY
puissent donner des plans d'exécution similaires, CROSS APPLY
démontre une efficacité supérieure avec de grands ensembles de données nécessitant un partitionnement ou une pagination. En éliminant les JOIN
conditions explicites, cela permet à l'optimiseur de base de données d'utiliser les résultats intermédiaires mis en cache, ce qui accélère l'exécution des requêtes.
Exemple illustratif :
La requête suivante illustre l'avantage de CROSS APPLY
sur INNER JOIN
lors d'une itération plusieurs fois sur la table de droite pour chaque ligne de la table de gauche :
<code class="language-sql">/* CROSS APPLY */ SELECT t1.*, t2o.* FROM t1 CROSS APPLY ( SELECT TOP 3 * FROM t2 WHERE t2.t1_id = t1.id ORDER BY t2.rank DESC ) t2o</code>
Cette requête récupère efficacement les trois premiers t2
enregistrements pour chaque t1
ligne. Répliquer cette fonctionnalité avec INNER JOIN
serait nettement plus complexe et moins efficace.
Référence de performance :
Les tests sur une table de 20 000 000 d'enregistrements ont montré une différence spectaculaire : CROSS APPLY
exécutée presque instantanément, alors qu'une INNER JOIN
requête équivalente utilisant une fonction CTE et une fonction de fenêtre prenait environ 30 secondes.
En résumé :
CROSS APPLY
est le meilleur choix lorsque les conditions JOIN
explicites ne sont pas disponibles ou lorsqu'il s'agit de partitionnement ou de pagination d'ensembles de données volumineux. Son efficacité dans ces scénarios en fait un outil précieux pour l'optimisation des requêtes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!