ORM相关性能

Posted sunnymn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORM相关性能相关的知识,希望对你有一定的参考价值。

user_list = models.UserInfo.object.all()

for row in user_list:
    #只能取当前表数据,否则性能会非常低

select_related,主动连表查询【FK】

    user_list = models.UserInfo.objects.all().select_related("FK字段")
    for row in user_list:
        #只能取当前表数据和FK表关联字段

    user_list = models.UserInfo.objects.values(...)
    for row in user_list:
        #只去取当前表数据和FK表关联字段

    ===》 连表降低性能
   
prefetch_related:

    user_list = models.UserInfo.objects.all().prefetch_related(‘FK字段‘)

     #查询用户表models.UserInfo.objects.all()   1000个obj
     #把用户表中所有的ut_id拿到,用户类型ID  [1,2,3]
     #select  *  from UserType  where  id  in  [1,2,3]
    
     user_list = models.UserInfo.objects.all().prefetch_related(‘ut‘,‘xx‘)
     for row in user_list:
           print(row.name, row.pwd, row.ut.caption)


补充:
     #[obj,obj,obj]
     user_list = models.UserInfo.objects.all().only(‘name‘)   # 只取某个字段 
     user_list = models.UserInfo.objects.all().defer(‘name‘)  # 排除当前字段    
      for row in user_list:
          print(row.pwd)

 

以上是关于ORM相关性能的主要内容,如果未能解决你的问题,请参考以下文章

ORM性能相关

ORM之select_related 性能相关

跟踪 ORM 性能

hibernate vs ebean 作为可扩展的高性能 ORM

具有相同功能的活动和片段

.net平台性能很不错的轻型ORM类Dapper