2 Stimmen

hash-funktionen-sql studio express

Ich muss einen Hash-Schlüssel auf meine Tabellen für Eindeutigkeit erstellen und jemand erwähnte mich über md5. Aber ich habe über Prüfsummen und Binärsummen gelesen; würde dies nicht den gleichen Zweck erfüllen? Um sicherzustellen, dass es keine Duplikate in einem bestimmten Feld gibt. Jetzt ist es mir gelungen, dies zu implementieren, und ich sehe die Hask-Schlüssel in meinen Tabellen. Muss ich die ursprünglich erstellten Indexschlüssel ändern, da ich einen neuen Indexschlüssel mit diesen Hash-Schlüsseln erstellt habe? Muss ich auch die Schlüssel ändern? Wie ändere ich meine Abfragen, zum Beispiel SELECT-Anweisungen? Ich bin mir immer noch nicht sicher, wie Hash-Schlüssel bei Abfragen wirklich helfen, abgesehen von der Einzigartigkeit?

2voto

Quick Joe Smith Punkte 7836

Wenn Sie sicherstellen wollen, dass es in einem bestimmten Feld keine Duplikate gibt, warum wenden Sie dann nicht einfach einen eindeutigen Index auf dieses Feld an und lassen die Datenbankmaschine das tun, wofür sie gedacht ist?

2voto

gbn Punkte 407102

Es macht keinen Sinn, eine eindeutige Funktion zu schreiben, um eindeutige SQL Server-Einschränkungen/Indizes zu ersetzen.

Wie wollen Sie sicherstellen, dass der Hash eindeutig ist? Mit einer Einschränkung?

Wenn Sie es indizieren (was aufgrund des Determinismus nicht zulässig ist), wird es vom Optimierer als nicht eindeutig behandelt. Außerdem wird die Leistung beeinträchtigt.

Und Sie haben nur ein paar 100.000 Zeilen. Erdnüsse.

Wenn ich mehr Zeit hätte, könnte ich noch mehr Argumente anführen, aber ich fasse mich kurz: Tun Sie es nicht

1voto

Joel Coehoorn Punkte 377088

Es gibt immer die HashBytes() Funktion. Sie unterstützt md5, aber wenn Sie das nicht mögen, gibt es eine Option für sha1.

Ein einfaches Beispiel ist, wenn Sie eine große varchar-Spalte haben - vielleicht varchar max - und in Ihrer Abfrage wissen wollen, ob der Inhalt dieser Spalte mit einer bestimmten Zeichenfolge übereinstimmt. Wenn Sie Ihre Suche mit jedem einzelnen Datensatz vergleichen müssen, könnte das langsam sein. Wenn Sie jedoch einen Hash für Ihre Suchzeichenfolge verwenden, geht alles viel schneller, da es sich nur noch um einen sehr kurzen binären Vergleich handelt.

0voto

Luka Rahne Punkte 9982

Kryptografisch sichere Hash-Funktionen sind Einwegfunktionen und verbrauchen mehr Ressourcen (CPU-Zyklen) als Funktionen, die nicht kryptografisch sicher sind. Wenn Sie die Funktion nur als Hash-Schlüssel benötigen, brauchen Sie diese Eigenschaft nicht. Alles, was Sie brauchen, ist eine geringe Wahrscheinlichkeit für Kollisionen, was mit der Uniformität zusammenhängt. Versuchen Sie es mit CRC oder wenn Sie Strings oder Modulo für Zahlen haben.

http://en.wikipedia.org/wiki/Hash_function

0voto

SQLMenace Punkte 128184

Warum verwenden Sie nicht eine GUID mit einem Standardwert von NEWSEQUENTIALID() verwenden Sie nicht NEWID(), da es für die Clusterbildung schrecklich ist, siehe hier: Bewährte Praxis: Nicht auf UniqueIdentifier clustern, wenn Sie NewId verwenden

Machen Sie diese Spalte zum Primärschlüssel und Sie sind so gut wie fertig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X