Νομίζω ότι έχεις παρεξηγήσει την έννοια του primary key. Το primary key χρησιμοποιεται ως η "ταυτότητα" μίας οντότητας στα διάφορα queries, είτε για να διαβάσεις/τροποποιήσεις τα πεδία της π.χ. με ένα SELECT xyz from MyTable Where MyID=123, είτε σε joins, ειδικά όταν έχεις σχέσεις many to many π.χ. SELECT xyz from OrderItems, Orders Where Orders.ID=OrderItems.OrderID. Μοιάζει, χωρίς να είναι, με ένα pointer.
Ένα primary key χρησιμοποείται το 99,9999999999999999999% σε συγκρίσεις όπως η Orders.ID=OrderItems.OrderID. Οι υπόλοιπες περιπτώσεις είναι του τύπου Orders.ID>234. Σχεδόν ποτέ δεν συμμετέχει σε Like. Γι αυτό θέλεις να είναι όσο το δυνατόν μικρότερο, για να μην ξοδεύει χώρο στο σκληρό και τη μνήμη.
Σκέψου το εξής. Στα 4 bytes ενός int μπορείς να αποθηκεύσεις 4294967296 τιμές, ενώ οι συγκρίσεις μεταξύ ints γίνονται σε ένα μόλις operation από τον επεξεργαστή. Σε 4 chars μπορείς να αποθηκεύσεις μόλις 10000, ενώ οι συγκρίσεις είναι αργές και κατά κανόνα απαιτούν σύγκριση όλων των χαρακτήρων του string.
Γι αυτό το λόγο δεν χρησιμοποιείται σχεδόν ποτέ πεδίο varchar για Primary Key ή σε queries με Like.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos