Restrictions sur l'utilisation des sous-requêtes dans la clause FROM dans les vues des versions antérieures à MySQL 8.0
Dans les versions de MySQL antérieures à la version 8.0, il existait une restriction sur la création de vues contenant des sous-requêtes dans la clause FROM. Cette limitation provient des algorithmes d'optimisation des requêtes sous-jacents utilisés par MySQL.
Solution
Pour surmonter cette limitation, envisagez les solutions de contournement suivantes :
-
Créer une vue matérialisée : Une vue matérialisée est une vue précalculée qui stocke les résultats d'une requête dans une table distincte. En utilisant une vue matérialisée, vous pouvez éviter d'utiliser une sous-requête dans la clause FROM de la vue.
-
Utiliser des tables temporaires : Des tables temporaires peuvent être utilisées pour stocker les résultats des sous-requêtes. Les tables dérivées des sous-requêtes peuvent être référencées dans la clause FROM de la vue. A la fin de la session, la table temporaire est automatiquement supprimée.
-
Diviser la requête en plusieurs vues : Pour les sous-requêtes complexes, vous pouvez diviser la requête en plusieurs vues. Chaque vue peut ensuite être référencée par la vue principale sans utiliser de sous-requête dans la clause FROM.
Limitations de la solution
Les solutions mentionnées ci-dessus présentent certaines limites :
- Les vues matérialisées nécessitent des ressources supplémentaires et des frais de maintenance supplémentaires.
- Les tables temporaires affecteront les performances car elles sont stockées en mémoire.
- Le fractionnement des requêtes peut entraîner des problèmes de complexité du code et de maintenabilité.
Exemple de requête contenant une sous-requête dans la clause FROM
L'exemple de requête fourni ne peut pas être exprimé sans utiliser une sous-requête dans la clause FROM. La sous-requête est obligatoire car elle doit compter le nombre de messages envoyés par l'utilisateur et filtrer selon que le nombre est supérieur ou non à 3. Dans ce cas, des solutions de contournement telles que des vues matérialisées ou des tables temporaires sont nécessaires.
![Can MySQL Views Use Subqueries in the FROM Clause Before Version 8.0?](/static/imghw/default1.png)
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!