Digamos que eu tenha uma exibição indexada semelhante a esta:
ALTER VIEW dbo.MyIndexedView WITH SCHEMABINDING
AS
SELECT ord.SomeColumn, COUNT_BIG(*) AS Count
FROM dbo.Ordered ord
WHERE ord.CreatedWhen > CONVERT(DATETIME, '2014-11-01', 121)
GROUP BY ord.SomeColumn
GO
CREATE UNIQUE CLUSTERED INDEX [CIX_MyIndexedView] ON dbo.MyIndexedView (SomeColumn)
GO
Se eu alterar o valor de data e hora nesta exibição (digamos para '2014-11-01'), o índice clusterizado precisará ser regenerado.
Existe uma maneira de fazer com que a exibição e o índice existentes permaneçam em vigor até que o novo seja totalmente criado e, em seguida, troque-os? Igual aOnline=On
Aqui está como eu faria isso. Primeiro, crie alguns esquemas sobressalentes:
Agora, quando chegar a hora de atualizar a visualização e alterar o predicado do filtro, crie-o no
HoldingTank
esquema:Agora, inicie uma transação e troque os objetos.
Então, posteriormente, você pode simplesmente descartar a cópia antiga da exibição de
Swapper
:Eu entro em mais detalhes sobre esta solução nestas postagens de blog: