Maison >base de données >tutoriel mysql >Analyse des instructions MINUS, INTERSECT et UNION ALL des instructions SQL
Trois mots-clés dans l'instruction SQL : MINUS (soustraction), INTERSECT (intersection) et UNION ALL (union);
Tout le monde aurait dû apprendre la notion d'ensembles au collège, je n'entrerai donc pas dans les détails. Ces trois mots-clés sont principalement utilisés pour opérer sur les résultats des requêtes de la base de données, tout comme leur signification chinoise : deux requêtes, <.>MOINS consiste à soustraire le deuxième résultat de la requête du premier résultat de la requête. S'il y a une intersection, soustrayez la partie de l'intersection ; sinon, il n'y a aucune différence par rapport au premier résultat de la requête. deux L'intersection des résultats de la requête, UNION ALL est l'union de deux requêtes
Bien que la même fonction ; Il peut être implémenté avec de simples instructions SQL, mais la différence de performances est très grande. Quelqu'un a fait des expériences : made_order a un total de 230 000 enregistrements, charge_detail a un total de 170 000 enregistrements :
La différence de performances. est 15,956 fois ! Par conséquent, lorsqu'on rencontre ce genre de problème, il est préférable d'utiliser MINUS, INTERSECT et UNION ALL pour résoudre le problème, sinon, face à des millions de requêtes de données qui peuvent être vues partout dans le monde. affaire, le serveur de base de données ne sera pas battu à mort par nous ?
SELECT order_id FROM made_order MINUS SELECT order_id FROM charge_detail 耗时:1.14 sec SELECT a.order_id FROM made_order a WHERE a.order_id NOT exists ( SELECT order_id FROM charge_detail WHERE order_id = a.order_id ) 耗时:18.19 sec
PS : Lors de l'application de la soustraction, de l'intersection et de l'addition de deux ensembles, il y a des exigences strictes : 1. Les champs des deux ensembles doit être clair (l'utilisation de * ne fonctionnera pas, une erreur sera signalée) ; 2. Type de champ Identique à la commande (les noms peuvent être différents), par exemple : le champ 1 de l'ensemble 1 est NUMBER, le champ 2 est VARCHAR, alors le champ 1 de l'ensemble 2 doit également être NUMBER et le champ 2 doit être VARCHAR 3. Ne peut pas être trié, si vous souhaitez trier les résultats, vous pouvez ajouter une autre requête à l'extérieur après l'opération d'ensemble, puis trier Par exemple. l'exemple précédent peut être remplacé par :
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!