2015-03-04 2 views
0

В моем проекте я запрос вида:скорость до Rails .each метод по отношению

@authorizer.user_profile.garden_locations.each {...}

Могу ли я сделать это быстрее, чем-л, как это? :

@authorizer.user_profile.garden_locations.find_each {...}

или даже:

GardenLocation.where(user_profile_id: @authorize.user_profile.id).find_each {...}

Обратите внимание, что user_profile_id поле таблицы garden_locations уже проиндексированы

+3

они создают несколько запросов n + 1, вам лучше, если возможно, загружать нагрузку – Anthony

+0

@ Anthony, последнее решение не создает запрос n + 1, хотя – xamenrax

ответ

1

из вариантов предоставленных вами, тот, который, скорее всего, чтобы обеспечить наибольший выигрыш - последний (хотя и незначительно больше второго) —, учитывая, что у вас достаточно большой набор данных.

Это было бы так, потому что find_each будет получать вещи партиями, каждый раз загружая меньшие наборы данных в память. Это должно сохранить стабильный профиль памяти по мере роста размера данных.

Все, что сказано, сравнивают различия. Это довольно легко сделать, и вы узнаете многое о том, что делает ActiveRecord.

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