У меня есть пользовательский запрос, который выглядит следующим образом
self.account.websites.find(:all,:joins => [:group_websites => {:group => :users}],:conditions=>["users.id =?",self])
где self - это пользователь объект
Мне удается сгенерировать эквивалент SQL для того же
Вот как это выглядит
sql = "select * from websites INNER JOIN group_websites on group_websites.website_id = websites.id INNER JOIN groups on groups.id = group_websites.group_id INNER JOIN group_users ON (groups.id = group_users.group_id) INNER JOIN users on (users.id = group_users.user_id) where (websites.account_id = #{account_id} AND (users.id = #{user_id}))"
С приличным пониманием SQL и ActiveRecord Я предположил, что (с чем большинство согласится) результат, полученный из вышеупомянутого запроса, может занять больше времени по сравнению с результатом, полученным из find_by_sql (sql ) один .
но удивительно
Когда я запустил два вышеупомянутых
Я нашел пользовательский запрос ActiveRecord, ведущий путь от ActiveRecord "find_by_sql" по времени загрузки
вот результат теста
Время загрузки пользовательского запроса ActiveRecord
загрузка сайта (0,9 мс)
Колонки сайта (1,0 мс)
find_by_sql время загрузки
загрузка сайта (1,3 мс)
Колонки сайта (1,0 мс)
Я повторил тест снова и снова, и результат все равно остался прежним (пользовательский запрос выиграл битву)
Я знаю, что разница не так уж велика, но все же я просто не могу понять, почему обычный запрос find_by_sql медленнее, чем Custom Query
Может ли кто-нибудь поделиться этим светом?
В любом случае, спасибо
С уважением
Вирен Неги