Skip Navigation Links



Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de Usuários
»Células Acadêmicas«
intcontpiada : 118
Photoshop
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
Faça um pequeno teste com 10 questões de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programação com nosso treinamento on-line de lógica de programação
.:.
Veja nosso calendário de treinamentos
Gostou da Página?
Então

para um amigo!

Pesquisa personalizada
Pesquisar Dicas:

 






Truques de performance com Soundex e CheckSum

Já comentamos em uma dica em nosso site a utilização da função Soundex para a pesquisa de semelhança sonora. Veja :

select * from clientes where soundex(nome)=soundex("daniela")

Isso retornará todos os nomes cuja pronuncia seja igual a daniela. O soundex gera um código de 4 bytes identificador da pronuncia, ao ser feita a comparação o que está sendo comparado é este código.

A questão é que utilizando uma função durante a busca esta query não poderá utilizar nenhum tipo de índice, será obrigatória a realização de um table scan.

Isso pode ser resolvido de uma forma bem simples : Podemos criar uma nova coluna (char(4) , podemos chama-la de codigosom) para conter o resultado do Soundex e atualizar esta coluna automaticamente por um trigger.

Veja :

Create Trigger truSoundex on clientes for insert,update AS

if update(nome) /* a atualizacao so precisa ser feita se o campo nome foi alterado */
update clientes set codigosom=soundex(nome) where codcli in (select codcli from inserted)
/* este update atualiza na tabela clientes o campo codigosom de todos os clientes que encontram-se na tabela inserted */


Com o trigger acima atualizamos o campo codigosom sempre que houver qualquer atualizacao ou inclusao na tabela clientes. Agora, com o novo campo, torna-se possível fazer a seguinte query :

select * from clientes where codigosom=soundex("daniela")

Como nenhuma função é aplicada ao campo codigosom podemos agora indexar este campo e conseguiremos uma boa performance na busca, bem melhor do que inicialmente apenas com uso do soundex.

Como nem tudo são flores, a função difference utilizada para pesquisar a semelhança sonora mas aceitando pequenos níveis de diferença não poderá se aproveitar desta metodologia, tendo realmente que sofrer as perdas de um table scan.

Mas existe outra utilidade muito interessante para este truque. Todos sabem que indices em campos texto acabam prejudicando a performance mais do que ajudando, por isso não são recomendáveis. Por isso o SQL Server trouxe o recurso de Full-Text Search que permite a indexação de campos texto, mas uma indexação um pouco diferente da indexação de banco tradicional.

Porém no SQL Server 2000 podemos utilizar uma solução intermediária : O SQL Server 2000 possui uma função chamada CheckSum que gera um código numérico (um checksum) a partir de uma informação texto. Então, assim como fizemos com o sounces, podemos criar uma coluna na tabela para guardar o CheckSum e criar um trigger para atualiza-lo.

O campo a ser criado deverá ser int, pois é este o tipo de retorno da função checksum. Digamos que em uma tabela "livros" tenhamos um campo chamado "titulo". Podemos criar um campo chamado chktitulo com o checksum do título do livro.

O trigger para atualizar o campo ficaria assim :

Create Trigger truCHK on livros for insert,update AS

if update(titulo) /* a atualizacao so precisa ser feita se o campo titulo foi alterado */
update livros set chktitulo=checksum(titulo) where codlivro in (select codlivro from inserted)
/* este update atualiza na tabela livros o campo chktitulo de todos os livros que encontram-se na tabela inserted */


Veja o select da busca de um livro :

Select * from livros where chktitulo=checksum("O caso dos dez negrinhos") and titulo="O caso dos dez negrinhos"

Observe a dupla seleção feita na clausula where : A MS não garante que em textos muito parecidos não ocorra duplicidade de checksum. Portanto, inserindo a dupla checagem na clausula where garantimos que obteremos o registro que realmente desejamos.

A partir dai podemos indexar o campo chktitulo e realizar pesquisas de campos texto longos mais facilmente.

Conheça mais sobre o nosso site :

Dennes Torres
MCSD,MCSE,MCDBA





Envie seus comentrios sobre este artigo

Nome :

E-mail :

Comentários :


Avise-me quando houverem novos comentrios nesta pgina

Veja abaixo os comentários já enviados :

Nome : ZXEKEYhJ E-Mail : irmgard.eberle@t-online.de
Hey, you're the goto exrept. Thanks for hanging out here.
Nome : YkLw0G9W3 E-Mail : 239xxf8xri@hotmail.com
dimok: ??????? ??? ? ?????????????? ???? ?????? ? ??? ? ????? ???? ???? ??? ? ??? ???? :)??? ?????? ???????????, ??? ? ??????????? ???????? ?????:kindergarten, primary scoohl, high scoohl, college, work and the United States military

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Conheça mais sobre o nosso site :

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



Quer saber mais?
Faça um curso na Búfalo Informática, Treinamento e Consultoria e
Prepare-se para o Mercado!
Veja o que a Búfalo tem para você.

� Búfalo Informática, Treinamento e Consultoria - Rua Álvaro Alvim, 37 Sala 920 - Cinelândia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail:
contato@bufaloinfo.com.br