Первичный ключ - это логическая структура базы данных, которая должна быть уникальной и отличной от NULL (которая реализована с помощью индекса).
Кроме того, вы можете выбрать один кластерный индекс, который должен быть узким, уникальным, увеличивающимся и статичным (электронная почта, вероятно, НЕ подходит для этого).
Я бы сделал IDENTITY int первичным ключом и кластером на нем.
Я бы добавил уникальный некластеризованный индекс по электронной почте и «включил» дополнительные столбцы, чтобы ваши наиболее частые тяжелые запросы покрывали (т. Е. Хэш пароля). Обратите внимание, что вам не нужно добавлять кластеризованный ключ во включенные столбцы, поскольку он всегда включается как закладка в некластеризованный индекс).
Посмотрите на планы выполнения, чтобы убедиться, что вы не видите ни сканирования таблицы, ни сканирования кластерного индекса в пользовательской таблице.
Я бы добавил, что обычно люди думают, что просмотр запросов с использованием кластерного индекса - это хорошо. Я бы сказал, что сканирование или поиск некластеризованного индекса, используемый в запросе, где охватываются индексы, так же хорош в куче (таблица без кластерного индекса), как и в кластерном индексе, и лучше, чем сканирование или поиск кластерного индекса. , Я также утверждаю, что кластеризованный индекс - это имя, которое приводит людей ко всем видам предположений о вещах (для начала, это не совсем индекс таблицы, это указывает на то, что таблица полностью хранится в структуре индекса) и неправильные представления. о его важности. Кластерные индексы наиболее важны при очень больших операциях, где требуется большой объем данных в порядке кластеризации.
Реальная (считываемая) скорость запросов для типичных OLTP-запросов достигается за счет покрытия запроса самыми узкими из возможных некластеризованных индексов для всех таблиц в запросе с каждым столбцом в соответствующем порядке и правильным направлением сортировки для запроса / параметров.