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 <shono...@gmail.com> 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: SaoPaulo-pm@pm.org > 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: SaoPaulo-pm@pm.org L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer