Нужна помощь в оптимизации запроса в ruby ​​на рельсах - PullRequest
1 голос
/ 08 ноября 2011

В моей таблице Raw_deals содержится около 30 000 записей, а в таблице raw_cities - около 30 записей, и каждая сделка связана с 5-8 городами.

Теперь я хочу получить любую случайную сделку в некоторых городах.

Список этих городов можно получить так:

@raw_cities = RawCity.where('disabled = ?', 0).map(&:id)

Теперь мне нужна сделка. Я написал запрос, но он занимает слишком много времени.

@raw_deal = RawDeal.order("RAND()").find(:first,:joins=>[:raw_cities], :conditions=>["raw_cities.id IN (?)",@raw_cities])

1 Ответ

3 голосов
/ 08 ноября 2011

Возможно, order("RAND()") замедляет ваш запрос, и, поскольку вы ищете только одну единственную сделку, вы можете использовать комбинацию limit и offset для имитации случайного заказа.1005 * Попробуйте что-то вроде этого:

@raw_deal = RawDeal.offset(rand(RawDeal.count)).
                    joins(:raw_cities).
                    where(raw_cities: @raw_cities).
                    first
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...