OK, interessante Frage. Ich habe immer davon ausgegangen, dass die Ganzzahl schneller ist, habe es aber nie wirklich getestet. Ich nahm 1M zufällige Nachnamen und Typen aus einer Liste von Kontakten aus meinen Daten in eine Scratch-Datenbank ohne Indizes oder Primärschlüssel nur Rohdaten. Keine Messung wurde über den Bereich meiner Daten in einer der Spalten gemacht wurde nicht standardisiert, so spiegelt die Realität meiner Datenbank eher als eine reine statistische Satz.
select top 100 * from tblScratch where contactsurname = '<TestSurname>' order by NEWID()
select top 100 * from tblScratch where contacttyperef = 1-22 order by NEWID()
Die Newid ist dazu da, die Datenliste jedes Mal nach dem Zufallsprinzip zu erstellen. Ich habe dies schnell für 20 Nachnamen und 20 Typen durchgeführt. Die Abfragen wurden nach dem Nachnamen und dann nach dem Nachnamen durchgeführt. Die Suche nach der Referenznummer war fast 4x schneller und verbrauchte etwa die Hälfte, so dass die Bücher vor all den Jahren richtig waren.
String -
SELECT TOP 100 * FROM tblScratch WHERE contactsurname = 'hoare' ORDER BY NEWID()
Duration 430ms
Reads 902
CPU 203
Ganzzahlig -
SELECT TOP 100 * FROM tblScratch WHERE contacttyperef = 3 ORDER BY NEWID()
Duration 136ms
Reads 902
CPU 79