Две вещи, которые могут повлиять на производительность индекса (и общей базы данных):
1) Размер страницы индекса
2) Скорость сравнения
Таким образом, для первого, как правило, чем меньше ваша страница индекса / данных, тем больше страниц вы можете удерживать в памяти, и тем выше вероятность того, что данный запрос сможет найти страницу в кеше по сравнению с медленным диск. Таким образом, вы хотите использовать наименьший тип данных, который может удобно соответствовать вашим существующим и предлагаемым будущим потребностям.
BigInt - 8 байтов; VARCHAR может быть меньше, если размер данных невелик, поэтому он действительно зависит от ваших данных. Тем не менее, 10-символьные числа могут соответствовать типу INT SQL Server (http://msdn.microsoft.com/en-us/library/ms187745.aspx) в зависимости от размера, поэтому тип int и bigint зависит от вашего домена.
Кроме того, если вся ваша строка имеет фиксированную длину, есть некоторые определенные оптимизации, которые SQL Server может выполнять при сканировании, поскольку он точно знает, где на диске будет находиться следующая строка (при условии, что строки являются смежными). Конечно, это крайний случай, но он может помочь.
Во втором случае сравнивать целые числа быстрее, чем в юникодных строках. Поэтому, если вы храните только числовые данные, вам определенно следует переключиться на числовой тип данных соответствующего размера.
Наконец, Марк прав, что это становится очень запутанным первичным ключом. Однако, если ваши данные этого требуют - например, они являются вашими ЕДИНСТВЕННЫМИ столбцами, и вы никогда не выполняете дополнительные запросы - вы можете прекрасно сделать оптимизированную версию (с Bigints и т. Д.) Своим первичным ключом. Впрочем, отчасти пахнет кодом, поэтому я повторю его совет, чтобы действительно взглянуть на вашу модель данных и посмотреть, верна ли она.