:id, :email, :entity_id
Необходимо построить максимально быстродействующий запрос (в идеале) для следующего:
SELECT users.* where email = 'x' OR entity_id IN (SELECT min(entity_id) FROM users.* where email = ‘x’)
Юзеров очень много и не хочется делать что то подобное в переводе на руби:
scoped_users = User.where(email: 'x')
min_entity_id = scoped_users.minimum(:entity_id)
result = User.where(id: scoped_users.ids).or(User.where(entity_id: min_entity_id)
А почему не хочется?
На стаковерфлов есть монстр в разделе, забыл ник, он даже понял мой ломанный английский.
На еmail уникальность отменили? Как авторизуется ваш юзер?
что значит максимально быстродействующий
а ты уверен что запрос имеет смысл? у тебя во втором условии после OR берется минимальный entity_id юзера с таким же имейлом как и в первом условии. То есть получается у тебя всегда будет отрабатывать только первое условие с email = x,
почта не уникальная у коллеги, очень вероятно
это ничего не меняет. если нет записей удовлетворяющих email = x, то уж найти минимальный entity_id у них ты точно не сможешь
так это же пример. Тут не связано с авторизацией
есть такое чувство, что должно взлететь с более грамотным запросом. Но придумать его не получается. На проде можно встрять, а должно не больше 100 мс отрабатывать 🙂
Ну сделайте дамп и проверьте. Сколько строк в таблице?
ну там explain analyze то се, индексы всякие
сча, пару минут покаунтит 🙂
Айдишник последнего посмотрите, если числовой
около 70 млн, айдишник на 5 лн отличается
Обсуждают сегодня