Performances des vues MySQL

Si vous envisagez d’utiliser des vues, comment pouvez-vous garantir de bonnes performances?

Ou est-il préférable de ne pas utiliser les vues en premier lieu et d’intégrer simplement l’équivalent dans vos instructions sélectionnées?

    Ça dépend.

    Cela dépend totalement de ce que vous regardez à travers la vue. Mais probablement en réduisant vos efforts et en améliorant vos performances. Lorsque l’instruction SQL fait référence à une vue non indexée, l’parsingur syntaxique et l’optimiseur de requêtes parsingnt la source de l’instruction SQL et de la vue, puis les résolvent en un seul plan d’exécution. Il n’y a pas un plan pour l’instruction SQL et un plan distinct pour la vue.

    Une vue n’est pas compilée . C’est une table virtuelle composée d’autres tables. Lorsque vous le créez, il ne réside pas quelque part sur votre serveur. Les requêtes sous-jacentes constituant la vue sont soumises aux mêmes gains de performance ou aux mêmes performances que l’optimiseur de requêtes. Je n’ai jamais testé les performances sur une vue VS sa requête sous-jacente, mais j’imagine que les performances peuvent varier légèrement. Vous pouvez obtenir de meilleures performances sur une vue indexée si les données sont relativement statiques. C’est peut-être ce que vous pensez peut-être en termes de “compilé”.

    Avantages des vues:

    1. Affichez les données sans stocker les données dans l’object.
    2. Reste la vue d’une table, c’est-à-dire qu’elle peut masquer certaines des colonnes des tables.
    3. Joignez-vous à deux tables ou plus et affichez-le comme un seul object à l’utilisateur.
    4. Restreignez l’access d’une table pour que personne ne puisse insérer les lignes dans la table.

    Voir ces liens utiles:

    1. Performances de l’instruction VIEW vs. SQL
    2. Est-ce qu’une vue est plus rapide qu’une simple requête?
    3. Mysql VIEWS vs requête PHP
    4. Les vues MySQL sont-elles dynamics et efficaces?
    5. Vue matérialisée vs tableaux: quels sont les avantages?
    6. L’interrogation d’une vue est-elle plus lente que l’exécution directe de SQL?
    7. Une solution de contournement pour les problèmes de performances des vues TEMPTABLE
    8. Voir les gains de performances en utilisant des vues indexées dans SQL Server

    Je pense que le blog de Peter Zaitsev contient la plupart des détails. Parler à partir d’expériences personnelles peut s’avérer efficace si vous les gardez généralement simples. À l’un de mes clients, ils ont continué à étaler une vue sur une autre et cela a abouti à un cauchemar de performance.

    Généralement, j’utilise les vues pour montrer un aspect différent d’une table. Par exemple, dans ma table des employés, affichez-moi les responsables ou masquez le domaine des salaires des employés non-RH. Assurez-vous également de toujours lancer EXPLAIN sur la requête et de voir exactement ce qui se passe dans MySQL.

    Si vous voulez une preuve solide dans votre scénario, je vous suggère de tester. Il est vraiment difficile de dire que l’utilisation des vues est toujours une tuerie, alors encore une fois, une vue mal écrite va probablement tuer votre performance.

    Ils servent leur objective, mais les complexités et les inefficiences cachées l’emportent généralement sur une approche plus directe. J’ai déjà rencontré une instruction SQL qui se joignait à deux vues et les sortingait. Les vues étaient également sortingées, de sorte que le temps d’exécution pouvait être mesuré en heures.

    Voici un résumé, vous pouvez trouver des évaluations détaillées de Peter Zaitsev et d’ailleurs.

    Les vues dans MySQL sont généralement une mauvaise idée. Chez Grooveshark, nous les considérons comme nuisibles et les évitons toujours. Si vous êtes prudent, vous pouvez les faire fonctionner, mais au mieux, ils permettent de se rappeler comment sélectionner des données ou vous empêcher de ressaisir des jointures compliquées. Dans le pire des cas, ils peuvent entraîner des inefficacités massives, masquer la complexité, provoquer des sous-sélections nestedes accidentelles (nécessitant des tables temporaires et entraîner une destruction du disque), etc.

    Il est préférable de les éviter et de garder vos requêtes en code.

    Si nous discutons “si vous utilisez des vues, comment assurer les performances”, et non l’effet de performance des vues en général, je pense que cela se résume à la retenue (comme en vous-même).

    Vous pouvez avoir de gros problèmes si vous écrivez simplement des vues pour simplifier votre requête dans tous les cas, mais ne prenez pas soin que vos vues soient réellement utiles en termes de performances. Toutes les requêtes que vous effectuez à la fin doivent être sane (voir l’exemple de commentaire de ce lien par @eggyal). Bien sûr, c’est une tautologie, mais donc pas moins de valeur

    Vous devez surtout faire attention à ne pas faire de vues à partir de vues, simplement parce que cela pourrait faciliter la prise de vue.

    En fin de compte, vous devez examiner la raison pour laquelle vous utilisez des vues. Chaque fois que vous faites cela pour rendre la vie plus facile à la fin de la programmation, vous pourriez être mieux avec une procédure stockée IMHO.

    Pour garder les choses sous contrôle, vous pouvez écrire pourquoi vous avez un certain sharepoint vue et décider pourquoi vous l’utilisez. Pour chaque nouvelle utilisation dans votre programmation, revérifiez si vous avez réellement besoin de la vue, pourquoi vous en avez besoin, et si cela vous donnerait toujours un chemin d’exécution sain. Continuez à vérifier vos utilisations pour restr rapide et continuez à vérifier si vous avez vraiment besoin de cette vue.

    Une chose qui n’a pas été mentionnée jusqu’à présent mais qui fait une énorme différence est l’ indexation adéquate des tables sources des vues .

    Comme mentionné ci-dessus, les vues ne résident pas dans votre firebase database mais sont reconstruites à chaque fois . Ainsi, tout ce qui facilite la reconstruction de la firebase database augmente les performances de la vue.

    Souvent, les vues rejoignent les données d’une manière très néfaste pour le stockage (pas de forme normale) mais très utiles pour une utilisation ultérieure (parsing, présentation des données à l’utilisateur, etc.) et ainsi

    Si les colonnes sur lesquelles les opérations sont effectuées sont indexées ou non, cela fait une énorme différence sur les performances d’une vue. Si les tables et leurs colonnes pertinentes sont déjà indexées, l’access à la vue ne se limite pas à recalculer les index encore et encore . (à la baisse, cela se fait lorsque les données sont manipulées dans les tables source)

    ! Indexez toutes les colonnes utilisées dans les clauses JOINS et GROUP BY dans votre instruction CREATE VIEW!