DB musi utrzymywać B-drzewo (lub podobnej konstrukcji) z kluczem w taki sposób, aby je uporządkować.
Jeśli klucz jest zahaszowany i zapisany w B-Tree, dobrze byłoby szybko sprawdzić unikalność klucza — klucz nadal może być sprawnie wyszukiwany. Ale nie będziesz w stanie skutecznie wyszukiwać zakresu danych (np. z LIKE
), ponieważ B-Tree nie jest już uporządkowane zgodnie z wartością String.
Myślę więc, że większość DB naprawdę przechowuje String w B-Tree, co może (1) zajmować więcej miejsca niż wartości liczbowe i (2) wymagają, aby B-Tree było ponownie zbalansowane jeśli klucze są wstawiane w dowolnej kolejności (brak pojęcia zwiększania wartości jak w przypadku numerycznego pk).
Kara w praktyce może wahać się od nieznacznego do ogromnego. Wszystko zależy od użycia, liczby wierszy, średniej wielkości klucza string, zapytań dołączających do tabeli itp.