HASHBYTES
Funkcja trwa tylko do 8000 bajtów jako wejście. Ponieważ dane wejściowe są potencjalnie większe, duplikaty w zakresie pola, które zostanie zaszyfrowane , spowoduje kolizje, niezależnie od wybranego algorytmu. Ostrożnie zastanów się nad zakresem danych, które planujesz mieszać - użycie pierwszych 4000 znaków jest oczywistym wyborem, ale może nie być najlepszym wyborem dla twoich danych.
W każdym razie, z powodu tego, czym jest funkcja skrótu, nawet jeśli dane wejściowe mają 8000 bajtów lub mniej, jedynym sposobem na zapewnienie 100% poprawności wyników jest porównanie wartości podstawowych w pewnym momencie (czytaj: niekoniecznie najpierw ). Kropka.
Firma będzie decydować, czy wymagana jest 100% dokładność. Dzięki temu dowiesz się, że (a) porównanie wartości bazowej jest wymagane , lub (b) należy rozważyć nie porównując wartości podstawowe - ile dokładność powinien odbywać się pod kątem wydajności.
Podczas gdy kolizje skrótu są możliwe w unikalnym zestawie danych wejściowych, są one nieskończenie rzadkie, niezależnie od wybranego algorytmu. Cały pomysł użycia wartości skrótu w tym scenariuszu polega na skutecznym zawężeniu wyników łączenia do łatwiejszego do zarządzania zestawu, niekoniecznie natychmiastowego uzyskania końcowego zestawu wyników. Ponownie, dla 100% dokładności, nie może to być ostatni etap procesu. W tym scenariuszu nie stosuje się mieszania do celów kryptografii, więc algorytm taki jak MD5 będzie działał dobrze.
Bardzo trudno byłoby mi usprawiedliwić przejście na algorytm SHA-x dla celów „dokładności”, ponieważ jeśli firma zacznie wariować na temat minimalnych możliwości kolizji w MD5, istnieje szansa, że również wystraszą się, że algorytmy SHA-x też nie są idealne. Muszą albo pogodzić się z niewielką niedokładnością, albo nakazać, aby zapytanie było w 100% dokładne i działało z powiązanymi implikacjami technicznymi. Podejrzewam, że jeśli CEO śpi lepiej w nocy, wiedząc, że użyłeś SHA-x zamiast MD5, cóż, dobrze; w tym przypadku nadal niewiele znaczy z technicznego punktu widzenia.
Mówiąc o wydajności, jeśli tabele są głównie do odczytu, a wynik łączenia jest często potrzebny, rozważ implementację widoku indeksowanego, aby wyeliminować potrzebę obliczania całego złączenia za każdym razem, gdy jest to wymagane. Oczywiście wymieniasz na to miejsce, ale może to być warte poprawy wydajności, szczególnie jeśli wymagana jest 100% dokładność.
Aby przeczytać więcej na temat indeksowania wartości długich ciągów, opublikowałem artykuł, który omawia przykład tego, jak to zrobić dla pojedynczej tabeli, i przedstawia rzeczy do rozważenia przy próbie pełnego scenariusza w tym pytaniu.