Conforme descrito, você não pode. A resposta que você deu é a maneira como você a alcançaria se não precisasse otimizá-la.
Se você precisar otimizá-lo sem completamente comprometer o valor criptografado e ter perfilado para descobrir que a quantidade de dados retornados e processados pelo seu filtro é uma das principais causas de atraso, você pode fazer o seguinte.
Adicione um novo campo à tabela que armazenará um subconjunto de um hash. Dependendo do número de endereços de e-mail exclusivos, você pode ajustar o tamanho desse subconjunto. Nota:Quanto menor, melhor, pois você está vazando algumas informações sobre o valor criptografado usando essa abordagem. Por exemplo, se você armazenar um hash de 1 byte do endereço de e-mail, estará reduzindo a entropia da criptografia em ~8 bits.
Ao consultar, primeiro crie o subconjunto do hash de email e coloque um
where
cláusula para retornar apenas essas linhas. Tudo isso pressupõe que a função hash é mais barata que a etapa de descriptografia. Essa abordagem exigiria que você recalculasse todos os subconjuntos de hash se quisesse aumentar seu tamanho, portanto, é importante escolher um tamanho que aumente significativamente o desempenho, não comprometa indevidamente a criptografia e provavelmente não precisará ser alterado à medida que você cresce .
Nota:Você não deve usar um hash direto como MD5 nesta situação. Não por causa de sua suscetibilidade a colisões, mas porque o espaço da chave será muito pequeno. Se o desempenho é importante e você armazena grandes quantidades de dados, você abre ataques de DOS em que o invasor cria grandes quantidades de endereços de e-mail que fazem hash para o mesmo subconjunto. Para evitar esse problema, use um HMAC função com uma chave secreta.
Lembre-se, a menos que você tenha motivos reais de desempenho para precisar adicionar complexidade - não