DB perlu mempertahankan B-Tree (atau struktur serupa) dengan kunci sedemikian rupa agar mereka dipesan.
Jika kunci di-hash dan disimpan di B-Tree, tidak masalah untuk memeriksa keunikan dengan cepat kunci -- kunci masih dapat dicari secara efisien. Namun Anda tidak akan dapat menelusuri rentang secara efisien data (misalnya dengan LIKE
) karena B-Tree tidak lagi diurutkan sesuai dengan nilai String.
Jadi saya pikir sebagian besar DB benar-benar menyimpan String di B-Tree, yang dapat (1) mengambil lebih banyak ruang daripada nilai numerik dan (2) mengharuskan B-Tree untuk seimbang kembali jika kunci dimasukkan dalam urutan arbitrer (tidak ada gagasan tentang peningkatan nilai seperti pk numerik).
Penalti dalam praktiknya dapat berkisar dari yang tidak signifikan hingga yang sangat besar. Itu semua tergantung pada penggunaan, jumlah baris, ukuran rata-rata kunci string, kueri yang bergabung dengan tabel, dll.