Particularmente eu valido se existe antes de inserir, acho mais fácil
tomar a decisão (informa que ja existe ou envia um email para trocar a senha) é
mais fácil e acertivo que tratar o erro do BD.
Para tornar esse processo mais rápido eu crio um campo do tipo binary
16 bytes e gravo o md5 (binario sem hexadecimal) do email e utilizo ele para
consulta.
Algo assim: select id from users where email_md5 = md5('fulano@bla')
and email = 'fulano@bla';
Onde somente o campo email_md5 tem index e você tem certeza que ele
sempre terá 16 bytes, se você tiver 1 milhão de usuários essa consulta terá um
custo risório. A segunda comparação é somente para evitar colisões de md5 e o
index é feito somente no campo email_md5.
Em 14/09/2013, às 12:06, Solli Honorio <[email protected]> escreveu:
> Pessoal
>
> Estou escrevendo um cadastro que tem o campo email com unique index. O meu
> primeiro impulso é fazer uma pesquisa no cadastro para verificar se o email
> já não existe, mas me dei conta que se eu tentar criar o registro e o email
> já existir, vou receber um erro informando isto.
>
> O que vocês acham disto ? É feio jogar com o erro (mesmo tratando o erro de
> maneira correta) ? Ou é melhor deixar de viver perigosamente e fazer o search
> antes do create.
>
> E porquê estou com está dúvida ? Não medi, mas teoricamente gravar e tratar o
> erro deve (ou deveria) ser mais rápido (pq eu faço "apenas uma operação de
> IO").
>
> Abraços,
>
> Solli Honorio
>
> --
> "o animal satisfeito dorme". - Guimarães Rosa
> =begin disclaimer
> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: [email protected]
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
=begin disclaimer
Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
SaoPaulo-pm mailing list: [email protected]
L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer