Wie beschrieben geht das nicht. Die Antwort, die Sie gegeben haben, ist die Art und Weise, wie Sie es erreichen würden, wenn Sie es nicht optimieren müssten.
Wenn Sie es ohne vollständig optimieren müssen Wenn Sie den verschlüsselten Wert kompromittieren und ein Profil erstellt haben, um die von Ihrem Filter zurückgegebene und verarbeitete Datenmenge zu ermitteln, eine der Hauptursachen für Verzögerungen sind, können Sie Folgendes tun.
Fügen Sie der Tabelle ein neues Feld hinzu, das eine Teilmenge eines Hashs speichert. Abhängig von der Anzahl eindeutiger E-Mail-Adressen können Sie einstellen, wie groß diese Teilmenge ist. Hinweis:Je kleiner, desto besser, da Sie mit diesem Ansatz einige Informationen über den verschlüsselten Wert preisgeben. Wenn Sie beispielsweise einen 1-Byte-Hash der E-Mail-Adresse speichern, reduzieren Sie die Entropie der Verschlüsselung um ~8 Bit.
Erstellen Sie bei der Abfrage zuerst die Teilmenge des E-Mail-Hashs und platzieren Sie ein where
-Klausel, um nur diese Zeilen zurückzugeben.
All dies setzt voraus, dass die Hash-Funktion billiger ist als der Entschlüsselungsschritt. Bei diesem Ansatz müssten Sie alle Hash-Teilmengen neu berechnen, wenn Sie die Größe erhöhen möchten. Daher ist es wichtig, eine Größe zu wählen, die die Leistung erheblich steigert, die Verschlüsselung nicht übermäßig beeinträchtigt und höchstwahrscheinlich nicht geändert werden muss, wenn Sie wachsen .
Hinweis:In dieser Situation sollten Sie keinen direkten Hash wie MD5 verwenden. Nicht wegen der Kollisionsanfälligkeit, sondern weil der Schlüsselraum so klein sein wird. Wenn Leistung wichtig ist und Sie große Datenmengen speichern, öffnen Sie sich selbst DOS-Angriffen, bei denen der Angreifer große Mengen an E-Mail-Adressen erstellt, die alle in dieselbe Teilmenge gehasht werden. Um diesem Problem entgegenzuwirken, verwenden Sie einen HMAC Funktion mit einem geheimen Schlüssel.
Denken Sie daran, es sei denn, Sie haben echte Leistungsgründe, warum Sie die Komplexität erhöhen müssen – tun Sie es nicht