2017-01-24 4 views
1

в моей модели, у меня естьRails запрос, чтобы найти запись между двумя датами занимает больше времени, когда диапазон велик

joins(:address).where("addresses.zipcode IN(?) AND accounts.created_at >= ? AND accounts.created_at <= ?", zipcodes, from_date, to_date) 

это работает отлично. но я использовал этот метод в своем контроллере и при выходе из этой функции в контроллере, если диапазон дат выше (около 50-60 лет). для получения результата требуется 7-8 секунд, длительность увеличивается с увеличением диапазона дат. И в терминале я вижу, что запрос продолжает загружаться, проверяя каждую дату. Как я могу уменьшить это время?

+0

Я не уверен, сколько времени он должен принять, но вы упомянули ** проверить для каждого и каждой даты **, так что если вы можете разместить журналы с сервером консоли какой SQL он срабатывает каждый раз, это может помочь оптимизировать. – Sajan

+0

'.where (адреса: {created_at: from_date..to_date, zipcode: zipcodes}). Это создаст' WHERE addresses.created_at BETWEEN'. – max

+0

Если это не помогает, нам нужна дополнительная информация о вашей схеме и журналах и воспроизводимый пример, чтобы помочь вам в дальнейшем. Вы можете использовать [EXPLAIN] (https://www.postgresql.org/docs/9.1/static/sql-explain.html), чтобы выяснить, почему запрос настолько медленный. – max

ответ

2

Добавить индексы accounts.create_at и addresses.zipcode

 Смежные вопросы

  • Нет связанных вопросов^_^