sexta-feira, 7 de agosto de 2009

VIEWS Indexadas no Sql Server

Durante muitos anos, o MS-SQL ofereceu o suporte para criação de views. Históricamente estas views atenderam a diversos propósitos:

* Providenciar mecanismos de segurança que restringem acesso a determinadas informações de uma tabela.
* Oferecer recursos aos desenvolvedores que permitem alterar como usuários podem visualizar lógicamente os dados aramazenados em uma ou mais tabelas

Com o MS-SQL 2000, a funcionalidade de criação de VIEWS foi expandida para oferecer benefícios na performance da execução de queries. Podemos então, criar índices únicos clusterizados e índices não clusterizados que melhoram o acesso as informações armazenadas no banco de dados.

De acordo com a documentação da Microsoft, existe um ganho de performance significativo, observado em bancos de dados de produção, Verifique o gráfico abaixo:



Hoje vamos exemplificar a criação de uma view indexada.

Primeiro vamos criar uma tabela com dados fictícios:

create table fornecedores(
codigo int identity(1,1),
nome varchar(100),
dtnascimento datetime,
flativo char(1))

Agora, vamos criar uma view que deverá referenciar a tabela recém-criada. Lembrando que para utilizarmos a funcionalidade de indexação de views, esta view deverá ser criada com a opção de SCHEMABINDING.

create view dbo.v_fornecedores
with schemabinding
as (
select
codigo,
nome,
dtnascimento,
flativo
from
dbo.fornecedores
where
year(dtnascimento)>2000
)

Uma view indexada, deve ter obrigatóriamente um índice clusterizado do tipo UNIQUE, caso contrário, ao criar um índice não cluesterizado você obterá a seguinte mensagem:

Msg 1940, Level 16, State 1, Line 2
Cannot create index on view 'dbo.sua_view'. It does not have a unique clustered index

Então vamos criar o nosso índice clusterizado e único:

create unique clustered index indVFornecedores on dbo.v_fornecedores(codigo)

Agora sim, podemos criar nossos índices não clusterizados:

create index indVForncedoresDtNasc on dbo.v_clientes(dtnascimento)

Até a próxima!

Nenhum comentário:

Postar um comentário

Leave your comment here!