Не зная, какие типы запросов вы будете выполнять, я бы порекомендовал проиндексировать два столбца внешнего ключа - Users.OpenID
и OpenIDs.UserID
.
Индексирование внешних ключей обычно является хорошей идеей, чтобы помочь с условиями JOIN и другими запросами.
Но, честно говоря, если вы используете таблицу OpenIDs
только для проверки существования OpenID
, вам будет гораздо лучше просто индексировать (возможно, уникальный индекс?) Этот столбец в таблице Users
и покончим с этим. Эта таблица OpenIDs
в том виде, в каком она у вас есть, теперь не имеет никакой реальной цели - просто занимает место для избыточной информации.
Кроме этого: вам нужно наблюдать за тем, как ваше приложение ведет себя, отбирать некоторые данные об использовании, а затем видеть, какие запросы выполняются чаще всего и дольше, а затем начинать настраивать производительность. Не переусердствуйте с преждевременной оптимизацией производительности - слишком много индексов могут быть хуже, чем их отсутствие вообще!
Каждый раз, когда кто-то проходит аутентификацию
с их открытым идентификатором, я должен найти их
псевдоним, посмотрев, какой пользователь имеет
дали OpenID и похоже что это
может быть довольно медленным , если основной
ключом является идентификатор пользователя (и есть
миллионы пользователей).
На самом деле, совсем наоборот! Если у вас есть уникальное значение среди миллионов строк, то найти это единственное значение довольно быстро - даже для миллионов пользователей. Это займет всего несколько (макс. 5-6) сравнений и взрыв! у вас есть один пользователь из миллиона. Если у вас есть индекс для этого столбца OpenID
, это должно быть довольно быстро. Такой высокоселективный индекс (одно значение выбирает 1 на миллион) работает очень и очень эффективно.