web-dev-qa-db-fra.com

Existe-t-il un moyen de mettre en cache une vue pour que les requêtes s'y rapportant soient rapides?

Je suis extrêmement nouveau dans Views, alors pardonnez-moi s'il s'agit d'une question idiote, mais j'ai une vue qui est vraiment utile pour optimiser une requête assez lourde et qui me permet de sélectionner un petit sous-ensemble de colonnes dans la vue. J'espérais que la vue serait effectivement stockée quelque part afin que la sélection ne soit pas très longue.

Je me trompe peut-être, mais j'ai le sentiment (de la vitesse d'exécution de create view et de la durée de mes requêtes sur ma vue) que la vue est réellement exécutée en tant que requête antérieure à la requête externe, chaque fois que je la sélectionne. .

J'espère vraiment que j'oublierai un mécanisme par lequel, lorsque j'exécuterai CREATE VIEW, il pourra alors effectuer le travail difficile d'interrogation de la requête View *, de sorte que ma sélection ultérieure par rapport à cette vue statique soit réellement Swift.

BTW, je comprends tout à fait qu'évidemment cette VIEW serait un instantané des données qui existaient au moment de la création de VIEW et ne refléterait aucune nouvelle information insérée/mise à jour après la création de VIEW. C'est exactement ce dont j'ai besoin.

TIA

22
Genia S.

Ce que vous voulez faire, c'est matérialiser votre vision. Regardez http://www.fromdual.com/mysql-materialized-views .

17
nakosspy

Ce dont vous parlez sont des vues matérialisées, une fonctionnalité de (au moins) DB2 mais pas de MySQL, à ma connaissance.

Il existe des moyens de émuler les en créant/en remplissant une table périodiquement, ou à la demande, mais une véritable vue matérialisée sait quand les données sous-jacentes ont été modifiées et ne recalcule que si nécessaire.

Si les données ne changent jamais une fois la vue créée (comme vous semblez l'indiquer dans un commentaire), créez simplement une nouvelle table pour contenir le sous-ensemble de données et interrogez that. Les gens se plaignent toujours de la lenteur mais rarement des exigences de stockage de données :-)

2
paxdiablo

Étant donné qu’une vue est essentiellement une instruction SELECT, vous pouvez utiliser query cache pour améliorer les performances.

Mais vous devez d’abord vérifier si: 

  • vous pouvez ajouter des index dans les tables impliquées pour accélérer la requête (utilisez EXPLAIN
  • les données ne changent pas très souvent, vous pouvez matérialiser la vue (créer des instantanés)
0
Stephan

Utilisez une vue matérialisée. Il peut stocker des données telles que le compte somme, etc. le nombre de cycles mémoire est réduit à 2, soit 4 en cas d’interrogation à partir de la table elle-même. Cela devient donc efficace à partir de la deuxième fois. Lorsque vous interrogez pour la première fois, les données sont extraites de la mémoire principale et stockées dans la mémoire cache après celle-ci.

0
mukul pahwa