2017年2月25日 星期六

N + 1 selects problem

假設有User,Country,Image等Entity,如下:
<<Table>>
IMAGE
ID <<PK>>
USERID <<FK>>
NAME
TYPE
DATA
                   
<<Table>>
USER
ID <<PK>>
COUNTRYID <<FK>>
USERNAME
                   
<<Table>>
COUNTRY
ID <<PK>>
NAME
CAPITAL
Java Class:
如果透過以下的方式存取:
那麼會先產生一個SELECT來load USER entity,
之後要iterates每個user以取得country,
因此總共會產生一個(來自query User),再加上N(視你的User總共有多少個)SELECT
如果已經事先知道一定會取的每個user中的country,那麼這種做法是很沒有效率的。
另外在Lazily loaded collections也是會發生同樣的問題:

沒有留言:

張貼留言