•  
     

MS-SQL: Melhore seus códigos T-SQL

E aí galera... vou contribuir com 3 dicas muitos importantes para melhorar o desempenho em código T-SQL para quem utiliza o banco de dados da Microsoft.

1ª- INDÍCES:
Talvez o mais importante quisito, porém, pouco usado e entendido por quem mexe em bancos de dados. E essa dica vale para qualquer banco, DB2, MySQl, PostgreSql e claro o MS-SQL.
Os indíces contribuem de forma espetacular na busca pelos registros, portanto ao usar a cláusula where certifique-se que existem indíces para os campos usados para a Busca.

Exemplo: SELECT * FROM CLIENTES (NOLOCK) WHERE CPF = '12345678900'

Neste caso, é uma tabela com milhares e milhares de registros a busca pode tornar-se muito lenta caso não haja um indíce com este campo e seria instantânea ao criar um índice:

CREATE INDEX CLIENTES_CPF on CLIENTES(CPF)

OBS: CUIDADO COM O EXCESSO DE ÍNDICES POIS PODE DEIXAR A TABELA LENTA E O EFEITO SERIA O CONTRÁRIO AO EXPERADO, TENTE LIMITAR ATÉ 15 ÍNDICES.


2ª - FUNÇÕES NA CLÁUSULA WHERE
Evitem ao máximo utilizar funções de qualquer tipo na cláusula WHERE, como RTRIM(CPF), LEFT(CPF), STR(CPF) pois o campo utilizado nesta função (o CPF) deixaria de ser buscado pelo índice tornando a busca sem índices e com isso lenta.

3ª - VARIÁVEIS DE TABELAS OU TABELAS TEMPORÁRIAS?
As duas formas são válidas, porém, cada uma de acordo com o processo.

Já resolvi problemas de desempenho trocando variáveis do tipo table por tabelas temporárias, pois a quantidade de registros era imensa e com a tabela temporária com os índices criados corretamente mudou de 3 horas para 20 segundos o relatório de uma grande empresa que mexi.
Então normalmente procure usar a variável do tipo table por consumir menos memória da transação mas se em sua análise souber que essa tabela poderá ter muitos registros pense em usar uma tabela temporária pois nela poderá criar os indíces que ajudarão no desempenho assim como falei na primeira dica.

Exemplos:

Como variável:
declare @tabela table(campo1 int, campo2 varchar(200)

como tabela temporária (apenas na instância, depois some):
create table #tabela (campo1 int, campo2 varchar(200)
--criando índice para ela:
create index idx_tabela_campo2 on tabela(campo2)


Espero ter contribuído com seu código.

Abraços.

Coronel J. White
Desenvolvedor T-SQL, PL/SQL, Delphi, DataFlex Web e Visual, PHP, ASP
 
Séh loko...

Aprendeu tudo comigo isso ae!

haha.. muito bom!

Abraços
 
Valeu Samm!!!

Abraços
 
De nada :D
 
- parabens Sam !