Em 17/02/2012 09:50, Moisés P. Sena escreveu:
> Bom dia pessoal!
>
> Estou modelando um sistema de autenticação de usuarios mas estou na
> duvida (Do ponto de vista do BD, e nao da aplicacao):
>
> a) Quero colocar o login como PK da tabela usuario como VARCHAR(30)
> b) Quero colocar o nome como PK da tabela grupo como VARCHAR(30)
>
> O que voces me falam de performance em usar VARCHAR ou BIGINT?
>
> Existe algum outro campo de texto mais rapido que VARCHAR?
Acho que depende muito, tenho sistemas de controle de entregas e
portanto uma tabela de tracking de cada uma destas entregas. Nesta
tabela tenho informações de o que cada usuário que manuseou esta entrega
fez.
Em um cliente esta tabela tem mais de 2 bilhões de registros. Antes eu
utilizava o código de barras das entregas como sendo minha chave
primária e portanto, tipo varchar. Quando fiz testes com biginteger tive
uma melhoria muito substancial de performance e de espaço em disco
ocupado, além de índices muito menores.
Eu quase sempre utilizo chaves artificiais. Porque conforme já
expressei minha opinião aqui na lista, na prática, é quase impossível
conseguir chaves naturais fiáveis. São poucas as entidades que o possuem.
Cada um sabe onde seu sapato aperta.
Levando para seu exemplo, tente imaginar, que nesta tabela de tracking
eu armazeno o usuário e ao invés de gravar o código deste usuário
(integer), 123 por exemplo, eu gravasse o nome: "EDMILSON.NASCIMENTO".
Só com este campo desta tabela eu teria cerca de 27 GB de espaço
economizado, sem contar os índices. Por mais que tentem me convencer que
a diferença de performance não é grande, para mim é suficientemente grande.
Abraço,
--
Shander Lyrio
http://about.me/shander
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral