[firebase-br] É saudavel usar Indices além de usar as Primary Keys ?

Eduardo Bahiense eduardo em icontroller.com.br
Ter Mar 4 22:46:07 -03 2008


Olá Chico

Abusar pode, mas, como sempre, não deve.
Se você tiver uma tabela de informações estáticas, como CEP, por 
exemplo, use e abuse.
Se for um atabela com muito pouco volume de 
inserções/atualizações/exclusões, use - mas abuse proporcionalmente à 
freqüência de alterações nesta tablea.

Motivo:
Cada vez que você altera uma informação em uma tabela, o SGBD terá que 
atualizar seus índices, quanto mais índices, mais trabalho e mais lenta 
a operação.

Pense em índices (secundários) como instrumentos para facilitar a 
recuperação de informações em tabelas com grandes volumes de dados.
Se eu tenho uma tabela com uma centena de registros, só o tempo que o 
SGBD vai levar para escolher o melhor índice para usar, vai levar mais 
tempo do que ele levaria percorrendo toda a tabela (busca natural) - Se 
o hard for bom, troque centenas por milhares.

Na maioria das vezes, o índice da chave primária é suficiente para as 
operações mais críticas, pois normalmente, precisamos localizar um 
determinado registro que, pela nossa própria modelagem, é único.

Vamos a uma tabela de pessoas. A chave primária, normalmente será um 
código, mas, freqüentemente, tenho que localizar por nomes e isso deve 
ter alta performance, pois é crítico no desenrolar da atividade. Então, 
Índice em nome.
Algumas vezes, precisamos localizar um cliente pelo seu endereço. Bem, 
aí precisamos analisar:
Vamos colocar índice em nome do logradouro, número, bairro, cep, cidade 
e uf?

Se isso não for crucial para a agilidade do processo, a resposta é NÃO. 
Mas não sejamos tão radicais assim. Primeiro, vamos fazer um select e 
ver o tempo de resposta em uma busca natural. Alguns milisegundos? deixa 
quieto. Vários segundos? precisamos indexar. Todos os campos?
Será que é possível o usuário informar o bairro? Pensemos uma região com 
20 bairros e 20000 clientes. O BD acha o primeiro bairro e depois só 
precisa percorrer em torno de 1000 registros para achar o(s) cliente(s). 
Se eu colocar o nome do logradouro no índice, isso reduz a somente uns 
50 a 100. Pronto! resolvi a performance e não entupi a tabela com um 
monte de índices.

Outra ferramenta importante é ver o grau de seletividade do índice. 
Seletividades maiores que 20%, muitas vezes, indicam que este índice 
está sobrando.

Bom, índice é assunto para uma semana. Te dei um bom início, agora...
Vá à luta.

Abs

Eduardo

Se for uma tabela normal, que inclui
Chico escreveu:
> Pessoal, eu uso as Primarys Keys para definir os campos chaves nos bancos.
> Porém se em um determinado banco um uso select em um campo que não é PK, 
> é aconselhavel um criar um indice para esse campo ? Ou melhor dizendo, 
> eu posso sair criando indices a vontade dentro da tabela ?
> 





Mais detalhes sobre a lista de discussão lista