segunda-feira, 14 de setembro de 2009

Indexando um campo calculado no Sql Server

Algumas comparações no SQL podem fazer com que o query optimizer opte por não fazer uso de índices, realizando os chamados table scans. É sempre recomendado que em tabelas com um grande número de registros, seja utilizados os index scans, que oferecem um resultado melhor a nível de performance. Comparações com funções que recebem campos como parâmetro podem ter resultados bastante ruins, e uma alternativa a seu uso, é justamente a criação de colunas calculadas, que por si já representam uma redução no overheaddo Sql Server.

Uma implementação ainda mais interessante, é a indexação do campo calculado. Abaixo um exemplo desta implementação:




create table funcionarios(
nome varchar(100) not null
)

alter table funcionarios add parte_nome as substring(nome,1,10)

create index indIdade on funcionarios(parte_nome)


Se fizermos:

select * from funcionarios

nosso índice pode passar despercebido pelo query optimizer (verifique o execution plan).

Mas podemos fazer uso de um query hint para dar aquela força pro Sql server:

select parte_nome from funcionarios with (index=indIdade)


Até a próxima!

Nenhum comentário:

Postar um comentário

Leave your comment here!