Я оптимизирую свое приложение и заметил кое-что интересное.Первоначально у меня было это утверждение в моем контроллере
@votes = Vote.paginate(:page => params[:page], :order=>"created_at DESC")
, и это, на мой взгляд,
<% @votes.each do |vote| %>
<tr>
<td><%= vote.user.display_name %></td>
...
Я попытался изменить контроллер для использования нетерпеливой загрузки:
@votes = Vote.includes(:user).paginate(:page => params[:page],
:order=>"created_at DESC")
При этом я заметил, что время запроса ActiveRecord для загрузки голосов / индекса удвоилось со 180 мс до 440 мс .Количество запросов было успешно сокращено при активной загрузке.Тем не менее, я нашел этот один трудоемкий запрос в ситуации активной загрузки only :
SQL (306.5ms) SELECT COUNT(DISTINCT "votes"."id") FROM "votes" LEFT OUTER JOIN "users" ON "users"."id" = "votes"."user_id"
Почему мой код запрашивает счетчик при левом внешнем соединении?Его нет в случае неагрессивной нагрузки.В случае неагрессивной нагрузки это самое близкое утверждение, которое я могу найти:
SQL (30.5ms) SELECT COUNT(*) FROM "votes"
Это что-то связано с paginate?Это какая-то комбинация двух?