關於 rails n+1 問題
關於
因為連續兩次面試都被問到這問題( Orz ),想用這機會整理
當前端需要一整串資料
@books = Book.limit(10)
<% @books.each | book | %>
<p> <%= book.name %></p>
<p> <%= book.author %></p>
<p> <%= book.company.name %></p>
<% end %>
Book.limit(10)
第一次會先撈前 10 筆 book
紀錄,但因為 book.company.name
會造成需要多額外十次 company
查詢
解決
因此用 includes
,確保資料表關聯
@books = Book.includes(:company).limit(10)
SELECT * FROM books LIMIT 10
SELECT companies.* FROM companies WHERE (companies.book_id IN (1,2,3,4,5,6,7,8,9,10))