Оптимизируйте запрос

#ruby-on-rails

#ruby-on-rails

Вопрос:

У меня есть следующий запрос, чтобы узнать общее количество отсчетов.


   SELECT count(*)
  FROM contacts_lists 
  JOIN plain_contacts
    ON contacts_lists.contact_id = plain_contacts.contact_id
  JOIN contacts
    ON contacts.id = plain_contacts.contact_id
  WHERE plain_contacts.has_email
    AND NOT contacts.email_bad
    AND NOT contacts.email_unsub
    AND contacts_lists.list_id = 45897
  

Для выполнения этой задачи требуется 150 мс.
Есть ли какой-либо другой способ выполнить приведенный выше запрос?
Есть ли какой-нибудь способ сократить время? возможно ли это? пожалуйста, скажите мне……………………………….

Комментарии:

1. Есть ли у вас индексы для полей внешнего ключа (различных contact_id )? У contacts_lists.list_id поля есть индекс?

Ответ №1:

Создавали ли вы индексы ( add_index при миграции) в своих contact_id столбцах? Также, возможно, было бы лучше использовать

 JOIN contacts ON contacts.id = contacts_lists.contact_id
# instead of: JOIN contacts ON contacts.id = plain_contacts.contact_id