Изменение Rails Query на Pure SQL

0

Я хочу переместить следующий код в сторону от ActiveRecord до чистого SQL для повышения производительности. Каким будет лучший способ написать этот запрос в чистом SQL (MySQL DB)?

User.count(:conditions => ["email = ?",params[:email]]) > 0

Спасибо

Теги:
activerecord

1 ответ

3
Лучший ответ

Аналогично find_by_sql вы можете использовать count_by_sql:

User.count_by_sql(["SELECT COUNT(*) FROM users u WHERE u.email = ?", params[:email]]) > 0

Помните также использовать синтаксис ["... ? ...", var] здесь для защиты от SQL-инъекции.

Однако я сомневаюсь, что вы можете добиться значительного улучшения производительности. Попробуй это. Если это не так, оставайтесь с версией ActiveRecord или попробуйте найти более подходящее решение для вашей проблемы.

Edit:

Если вы просто хотите проверить, содержит ли данное письмо в таблице, вы также можете проверить производительность User.find_by_email(params[:email]).present?

  • 1
    +1 - @Spashlin - низкая производительность, вероятно, означает, что ваш столбец User.Email нуждается в индексе.
  • 1
    Кроме того, вы можете использовать User.exists?(:email => params[:email]) если вы просто хотите посмотреть, присутствует ли уже пользователь. Это заботится о побеге автоматически.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню