MCDBA Brasil


  • Home
  • Sobre
  • Contato

Livros





Links Rápidos

SQL Server Builds (All Versions/Editions)


Download SQL Server 2017 (trial)


SQL Server 2017 Feature Pack


SQL Server 2016 Feature Pack


Cumulative Update SQL Server 2017 builds


Cumulative Update SQL Server 2016 builds


Cumulative Update SQL Server 2014 builds


Cumulative Update SQL Server 2012 builds


SQL Server 2005/2008 Samples Databases


Documentando o Servidor SQL Server


Analisando a Performance do Servidor-CheckList


Virtual PASS PT


Faça parte do maior virtual chapter do PASS com conteúdos técnicos em Português sobre SQL Server.

Todos os meses um evento Online para você! Acompanhe aqui os WebCasts já agendados

Sindicalize seu blog ou site ao VirtualPASSPT

SQL Server Blogs

SQL Server Query Processing Team


SQL Programmability & API Development Team


SQL Server Manageability Team


Latin America Support Team


Database + Disk + Performance


Microsoft SQL Server Support


SQL CLR Team


SQL Query Optimization Team


SQL 2005 Code Samples


SQL Server Express Team


SQL SMO Samples


SQL Storage Engine Team


SQL CAT Team


SQL Protocols Team


PSS SQL Server Engineers


Slava Oks on SQLOS


Ken Henderson’s blog


LUTI@Microsoft Blog


kimberly L. Trip’s blog


Fernando Garcia Blog

Artigos

Truques de performance com Soundex e CheckSum

por Nilton Pinheiro março 17, 2005 Nenhum comentário

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.

Avaliação:
Compartilhe:
  • Anterior Criação e Uso de Stored Procedures21 anos atrás
  • Próximo Usando FTP ( Put e Get ) com TSQL21 anos atrás

Deixe uma resposta Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

MVP Reconnect Award

Categorias

  • Artigos (359)
  • Dica da Semana (95)
  • Documentação (54)
  • Downloads (113)
  • MSDE 2000 (3)
  • Sem categoria (1)
  • Tutoriais (9)

Posts recentes

  • #FechouBrasil #PartiuPortugal
  • Brigando com o erro “The cached MSI file is missing”
  • MCDBABRASIL está de volta
  • Documentando o Servidor SQL Server
  • Brigando com os Erros 17182, 17826 e 17120

SQL Server AlwaysOn Video Series

Video1: Introdução ao SQLServer2012 AlwaysOn


Video2: Introdução ao SQLServer2012 AlwaysOn Availability Group


Video3: Introdução ao SQLServer2012 AlwaysOn AVG-Demo


Video4: Introdução ao SQLServer2012 AlwaysOn Listener


Video5: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries


Video6: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries-Demo


Video7: Introdução ao SQLServer2012 AlwaysOn Failover Clustering


Serie SQL Server Failover Clustering End-to-End

Parte 1: Configuração da Rede e Ambiente


Parte 2: Configurando o Windows 2008 R2 Domain Controler e DNS


Parte 3: Preparando os nós para o Failover Cluster


Parte 4: Configurando um Failover Cluster de 2 nós


Parte 5: Configurando as LUNs no iSCSI Software Target (Parte 1)


Parte 6: Configurando as LUNs no iSCSI Software Target (Parte 2)


Parte 7: Apresentando as LUNs para os nós do Failover Cluster


Parte 8: Configurando os discos no Failover Cluster


Parte 9: Instalando a primeira instância virtual do SQL Server 2008


Parte 10: Instalando a segunda instância virtual do SQL Server 2008


Parte 11: Instalando e Configurando o MSDTC no Failover Cluster


Parte 12: Configurando Mount Points no Cluster e SQL Server 2008


Vídeo Extra: Removendo uma Instância do SQL Server 2008 R2 em Cluster


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering Overview


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering na Prática

Menu

  • Home
  • Sobre
  • Contato

Mais

  • RSS Feeds
2026 MCDBA Brasil.