Bonjour,
Je voudrai comprendre pourquoi on ne peut pas indexer une vue dont la spécification contient des jointures externes.
Quelqu'un peut-il m'éclairer ?
@++![]()
Bonjour,
Je voudrai comprendre pourquoi on ne peut pas indexer une vue dont la spécification contient des jointures externes.
Quelqu'un peut-il m'éclairer ?
@++![]()
Parce que l'alimentation d'un index de vue est fait par différence et non par un recalcul global. Imaginez ce qu'un tel recalcul global couterait dans une vue d'agrégation (principal intérêt des vues indexées) si ce dernier devait refaire le calcul de 100 millions de ligne, si une seule ligne change. Alors qu'en delta, c'est juste ligne.VALUE = ligne.VALUE - DELETED.maColonne + INSERTED.macolonne.
Or toute présence d'un NULL à quelque niveau que ce soit oblige à un recalcul global, car avec un NULL il est possible que nous ne sachions pas à quelle ligne l'affecter notamment en matière d'UPDATE...
Une solution de contournement consiste à faire une vue indexée pour les données INNER et une requête pour les données OUTER et d'assembler le tout avec un UNION ALL.
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Merci SQLPro
@++![]()
Partager