|
|
|
|
|
by nemothekid
2998 days ago
|
|
Lets say I have a relationship where a User has one Profile. type User Struct { Id int ProfileId int Profile Profile }
type Profile Struct { Id int }
For a load like this: var u User
db.Model(&User{}).Preload("Profile").Where("id = ?", 7).Take(&u)
Gorm will do something like this: SELECT * FROM users WHERE id=7;
SELECT * FROM profiles WHERE id=7;
Where a join would be more desirable (only involves 1 trip to the db): SELECT * FROM users JOIN profiles ON profiles.id=users.profileid WHERE users.id=7
This also has a huge effect on when your initial queries aren't restricted by ID. Gorm will do huge "id IN (1,2,3,4)" queries - or sometimes if I need to filter on a relation (i.e. get users where profile.foo = bar), I end up doing the join getting that data anyways, then the eager queries loads that data again. |
|
I think add Join method and only support "One Data" preload is good way