N + 1 problems trong query

Điều này xảy ra khi truy vấn 1 bảng mà bảng đấy có quan hệ cha con với bảng khác và mình có gọi đến bảng con để lấy dữ liệu. Có ví dụ sau :

Ta có class Author và Book :

Nếu sử dụng câu lệnh sau :

Giả sử ta có 5 tác giả, mỗi tác giả có 10 quyển sách, thì khi này số lượng câu truy vấn được tạo ra là :

  • 1 truy vấn để lấy tất cả các tác giả.

  • 5 truy vấn để lấy được tất cả sách của 5 tác giả

    \=> N + 1 ở đây chính là 1 + 5 = 6 truy vấn

    Lưu ý : kể cả khi để fetch là Lazy,với mỗi lần gọi đến getBooks() thì vẫn bị N + 1 .

Loại bỏ N + 1 problems với join fetch:

Khi sử dụng join fetch thì tất cả bảng con đã được tải ngay từ ban đầu (trong trường hợp này là Books). Khi sử dụng lệnh getBooks() thì sẽ không bị gọi lại query vì tất cả đã được lấy ở lần đầu.

Lưu ý về join fetch:

Tham khảo : https://viblo.asia/p/van-de-n1-queries-Rk74aD3vVeO

0
Subscribe to my newsletter

Read articles from Phạm Tiến Đạt directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Phạm Tiến Đạt
Phạm Tiến Đạt