Question

J'ai trouvé une publication sur les forums MySQL à partir de 2005 , mais rien de plus récent que ça. Sur cette base, ce n'est pas possible. Mais beaucoup de choses peuvent changer d’ici 3-4 ans.

Ce que je recherche, c’est un moyen d’avoir un index sur une vue mais de ne pas indexer la table visualisée. L'indexation nuit au processus d'écriture et cette table est écrite assez fréquemment (au point où l'indexation ralentit le déroulement d'une analyse). Cependant, ce manque d'index ralentit péniblement mes requêtes.

Était-ce utile?

La solution

Je ne pense pas que MySQL prenne en charge les vues matérialisées, c’est ce dont vous auriez besoin, mais cela ne vous aiderait de toute façon pas dans cette situation. Que l’indice se trouve sur la vue ou sur la table sous-jacente, il devra être écrit et mis à jour à un moment donné lors de la mise à jour de la table sous-jacente, ce qui entraînerait toujours des problèmes de vitesse d’écriture.

Votre meilleur choix serait probablement de créer des tableaux récapitulatifs régulièrement mis à jour.

Autres conseils

Avez-vous envisagé d'extraire vos données de traitement des transactions de vos données de traitement analytique afin qu'elles puissent toutes deux être spécialisées afin de répondre à leurs besoins spécifiques?

L'idée de base étant que vous disposez d'une version des données régulièrement modifiée, il s'agirait du côté du traitement des transactions et nécessiterait une normalisation poussée et des index légers afin que les opérations d'écriture soient rapides. Une deuxième version des données est structurée pour le traitement analytique et tend à être moins normalisée et plus fortement indexée pour les opérations de reporting rapides.

Les données structurées autour du traitement analytique reposent généralement sur la méthodologie de l'entreposage de données basée sur les cubes. Elles sont composées de tables de faits représentant les côtés du cube et de tables de dimensions représentant les bords du cube.

Flexviews prend en charge les vues matérialisées dans MySQL en effectuant le suivi des modifications apportées aux tables sous-jacentes et en mettant à jour la table. fonctionne comme une vue matérialisée. Cette approche signifie que SQL supporté par la vue est un peu restreint (car les routines de journalisation des modifications doivent déterminer quelles tables doivent être suivies pour les modifications), mais pour autant que je sache, il s'agit du plus proche des vues matérialisées dans MySQL. .

Voulez-vous seulement une vue indexée? Il est peu probable que l'écriture dans une table avec un seul index puisse être aussi perturbante. N'y a-t-il pas de clé primaire?

Si chaque enregistrement est volumineux, vous pouvez améliorer les performances en déterminant comment le raccourcir. Ou raccourcissez la longueur de l'index dont vous avez besoin.

S'il s'agit d'une table en écriture seule (c'est-à-dire que vous n'avez pas besoin de mettre à jour), cela peut être fatal de commencer à l'archiver dans MySQL, ou bien de supprimer des enregistrements (et des clés d'index), nécessitant que l'index commence à se remplir (réutilisation) des emplacements de clés supprimées, plutôt que d’ajouter de nouvelles valeurs d’index. Contre-intuitif, mais il vaut mieux utiliser une table plus grande dans ce cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top