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.
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!