[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