J'utilise sql server 2008 et j'ai commencé à trouver en utilisant des vues indexées qui m'aident à accélérer certaines de mes requêtes ... comme mon schéma pas basique.Je ne sais pas si je comprends ce qu'une vue indexée fait dans les coulisses, dans SqlServer
Donc, si j'ai une table qui est la suivante ...
**ParentTable
ParentId INT PK IDENTITY
Name VARCHAR(MAX)
**ChildTable
ChildId INT PK IDENTITY
ParentId INT (FK to the table above)
Name VARCHAR(MAX)
Boundary GEOGRAPHY
CentrePoint GEOGRAPHY
CentrePointFlattened GEOMETRY
Donc, pour chaque ligne de la table parent, il peut avoir de nombreux enfants de zéro. Premièrement, si je fais une vue indexée des enfants, cela ne fonctionnera pas si le ParentId déposé peut être nullable. Donc j'ai besoin de le faire.
Maintenant la question.
J'ai une vue d'index des enfants table de join'd intérieure à la table des parents (note que je ne fais que l'indexation certains des champs de deux tables) ...
(pseduo sql code)
ParentId INT
Name VARCHAR(MAX) AS ParentName
ChildId INT
Name VARCHAR(MAX) as ChildName
Boundary GEOGRAPHY
maintenant, sont les données pour ces 5 champs sérialisés/copiés à un autre emplacement à nouveau? ou l'index ne crée-t-il que des ID d'index correspondant aux données de la table?
mais quel est le contenu de cette table? la même chose que la table d'origine? donc j'aurais deux copies des données GEOGRAPHY? ou est-ce que cette deuxième table _invisible_ ne contient que des nombres, qui sont des index vers les différentes colonnes, etc? –
Le "résultat de l'interrogation" (quelle que soit la colonne incluse dans la vue) sera stocké dans l'index. Tout comme une table qui stocke toutes les données de la colonne. Les pointeurs vers les lignes de la table d'origine ne sont pas stockés (il n'y a pas nécessairement une relation un à un entre les données dans la vue et les tables de support, pensez aux jointures et aux choses calculées) –
holy molly! Je pourrais expliquer pourquoi ma taille de DB est ... bien, devenant massive: P –