MySql points de vue de la performance
Si vous allez en bas de la route à l'aide de points de vue, comment pouvez-vous assurer de bonnes performances?
Ou est-il préférable de ne pas utiliser les vues à la première place et intégrer l'équivalent dans votre instructions select?
- J'ai trouvé cet article de blog par Peter Zaitsev très instructif dans le passé.
- Merci, va avoir une lecture et une réflexion
- Vérifiez également la récente MariaDB 5.3 (et 5.5) les rejets qui ont plusieurs améliorations sur l'optimiseur, y compris les Vues.
Vous devez vous connecter pour publier un commentaire.
Il Dépend.
Il dépend totalement de ce que vous voyez à travers la vue. Mais plus que probablement, la réduction de vos efforts et de donner une meilleure performance. Lors de l'instruction SQL références à une vue non indexée, l'analyseur et l'optimiseur de requête analyser la source de l'instruction SQL et de la vue, puis les résoudre dans un même plan d'exécution. Il n'y a pas un plan pour l'instruction SQL et un plan distinct pour la vue.
Vue n'est pas compilé. Ses une table virtuelle composée d'autres tables. Lorsque vous créez, il n'est pas résider quelque part sur votre serveur. Les requêtes sous-jacentes qui font de la vue sont soumis aux mêmes gains de performance ou des coups de l'optimiseur de requête. Je n'ai jamais testé les performances sur une vue VS sa requête sous-jacente, mais j'imagine que la performance peut varier légèrement. Vous pouvez obtenir de meilleures performances sur une vue indexée si les données sont relativement statiques. Ce peut être ce que vous envisagez peut-être en termes de "compilé".
Avantages de vues:
Voir ces liens utiles:
Voir des gains de performances en utilisant des vues indexées dans SQL ServerJe pense que le blog de Peter Zaitsev a la plupart des détails. Parlant de son expérience personnelle vues peuvent effectuer bien si vous les garder simple. Chez un de mes clients, ils ont gardé sur la superposition d'une vue sur le dessus de l'autre et il a fini dans un spectacle de cauchemar.
Généralement je utiliser des vues pour montrer un aspect différent d'une table. Par exemple dans ma table employés me montrer les gestionnaires ou de masquer le champ salaire de non RH des employés. Aussi assurez-vous toujours que vous exécutez une EXPLIQUER sur la requête et de la vue pour comprendre exactement ce qui se passe à l'intérieur de MySQL.
Si vous voulez une preuve solide dans votre scénario, je voudrais suggérer que vous testez. Il est vraiment difficile à dire à l'aide de points de vue est toujours une performance killer puis de nouveau un mal écrite de vue est probablement va tuer vos performances.
Voici un tl;dr résumé, vous pouvez trouver des évaluations détaillées de Peter Zaitsev et ailleurs.
Vues dans MySQL sont généralement une mauvaise idée. Au Grooveshark nous les considérons comme des nuisibles et toujours les éviter. Si vous êtes prudent, vous pouvez leur faire le travail, mais, au mieux, ils sont un moyen de se souvenir de la façon de sélectionner des données ou de vous éviter d'avoir à retaper compliqué rejoint. Au pire, ils peuvent causer des insuffisances massives, de masquer la complexité, de cause accidentelle imbriqués les sous-sélections (nécessitant des tables temporaires et conduisant à une surcharge du disque), etc.
Il est préférable de les éviter, et de garder vos requêtes dans le code.
Ils servent leur but, mais le caché complexité et l'inefficacité généralement l'emportent sur une approche plus directe. Une fois, j'ai rencontré une instruction SQL qui a été rejoint sur deux points de vue, et de trier les résultats. Les vues ont été tri ainsi, de sorte que le temps d'exécution peut être mesuré dans ce qui semblait être des heures.
Si nous discutons "si vous utilisez des points de vue, comment s'assurer de la performance", et non pas l'effet sur les performances de vues en général, je pense que ça se résume à des restrictions (comme toi).
Vous pouvez obtenir de gros problèmes si vous venez d'écrire points de vue pour faire de votre requête simple dans tous les cas, mais ne prenez pas soin de vos vues sont réellement utiles pour les performances. Toute requête que vous faites en fin de compte doit être en cours d'exécution sain d'esprit (voir l'exemple de commentaire de ce lien par @eggyal). Bien sûr, c'est une tautologie, mais donc pas moins valable
Vous avez surtout besoin d'être prudent de ne pas faire de points de vue à partir de points de vue, juste parce que cela pourrait rendre plus facile à faire de ce point de vue.
À la fin, vous avez besoin de regarder la raison pour laquelle vous êtes à l'aide de points de vue. Toutes les fois que vous le faites pour rendre la vie plus facile sur la fin de programmation, vous pourriez être mieux avec une procédure stockée à mon humble avis.
De garder les choses sous contrôle, vous pourriez écrire les raisons pour lesquelles vous avez un certain point de vue, et de décider pourquoi vous l'utilisez. Pour chaque "nouveau" dans le cadre de votre programmation, vérifiez si vous avez réellement besoin de la vue, pourquoi vous en avez besoin, et si ce serait encore de vous donner un sain d'esprit exécution de chemin. Continuez à vérifier votre utilise pour garder rapide, et de garder le contrôle si vous avez vraiment besoin de ce point de vue.
Une chose qui n'a pas été loin, mais faire une énorme différence est adéquate de l'indexation du point de vue " source tables.
Comme mentionné ci-dessus, points de vue ne résident pas dans votre DB mais sont reconstruire à chaque fois. Ainsi, tout ce qui fait le reconstruire plus facile pour la DB augmente les performances de la vue.
Souvent, les vues de joindre les données d'une manière qui est très mauvais pour le stockage (pas de forme normale) mais de très bonne qualité pour une utilisation ultérieure (en faisant l'analyse, la présentation de données à l'utilisateur, ...) et, partant, l'adhésion et l'agrégation de données provenant de différentes tables.
Si oui ou non les colonnes sur lesquelles on fait les opérations sont indexés ou non fait une énorme différence sur la performance d'un point de vue. Si les tables et les colonnes sont indexées déjà accès à la vue ne s'arrête pas à re-calcul de l'index maintes et maintes fois première. (sur le revers de la médaille, c'est de la faire lorsque les données sont manipulées dans les tables source)
! Index de toutes les colonnes utilisées dans les JOINTURES et les clauses GROUP BY dans votre instruction CREATE VIEW !