python django ORM 性能优化 select_related & prefetch_related

    q = models.UserInfo.objects.all()
    select * from userinfo
    select * from userinfo inner join usertype on ...
    for row in q:
        print(row.name,row.ut.title)

    select_related: 查询主动做连表
    q = models.UserInfo.objects.all().select_related('ut','gp')
    select * from userinfo
    select * from userinfo inner join usertype on ...
    for row in q:
        print(row.name,row.ut.title)

    prefetch_related: 不做连表,做多次查询
    q = models.UserInfo.objects.all().prefetch_related('ut')
    select * from userinfo;
    Django内部:ut_id = [2,4]
    select * from usertype where id in [2,4]
    for row in q:
        print(row.id,row.ut.title)

  

原文地址:https://www.cnblogs.com/morgana/p/8490807.html