L'indexation de vues avec une expression de table commune

Donc, je viens de constater que SQL Server 2008 ne permet pas d'indice d'une vue avec une expression de table commune dans la définition, mais il vous permet de alter la requête pour ajouter with schemabinding dans la définition de la vue. Est-il une bonne raison à cela? Est-il judicieux pour une raison que je ne suis pas au courant de? J'étais sous l'impression que WITH SCHEMABINDINGs avait pour principal objectif de vous permettre d'indice vue

nouveau et amélioré avec plus de requêtes action

;with x
as
(
    select   rx.pat_id
            ,rx.drug_class
            ,count(*) as counts
            from rx
            group by rx.pat_id,rx.drug_class

)
select   x.pat_id
        ,x.drug_class
        ,x.counts
        ,SUM(c.std_cost) as [Healthcare Costs]
    from x
    inner join claims as c
    on claims.pat_id=x.pat_id
    group by x.pat_id,x.drug_class,x.counts

Et le code pour créer l'index

create unique clustered index [TestIndexName] on [dbo].[MyView]
( pat_id asc, drug_class asc, counts asc)
  • En aparté, même s'il était possible de l'indice de ce point de vue, l'ensemble de la colonne (counts) ne devrait pas être partie de l'unique définition de l'index.