ORM之select_related 性能相关
Posted 老王的农场
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORM之select_related 性能相关相关的知识,希望对你有一定的参考价值。
select_related :
一次性取到值,不会发额外的sql请求
作用:查询主动做连表
q = models.UserInfo.objects.all().select_related(‘ut’,‘gp’)
#ForginKey的字段名
#3张表做关联
for row in q:
print(row.name,row.ut.title)
连表,性能会差,用户量大就慢。
对大公司而言,要速度。访问量大,就不用外键。
ForginKey节省硬盘空间,但是之后查询的时候,速度会慢的代价。
prefetch_ralated:
不做连表,做多次查询
q = models.UserInfo.objects.all().prefetch_ralated(‘ut‘)
#2次sql查询,都是单表查询
#django内部,ut_id = []
for row in q:
print(row.id,row.ut.title) #不连表,查另外一张表
以上是关于ORM之select_related 性能相关的主要内容,如果未能解决你的问题,请参考以下文章
Django框架详细介绍---ORM相关操作---select_related和prefetch_related函数对 QuerySet 查询的优化
orm的select_releated和prefetch_releated介绍
ORM数据库查询优化only与defer(select_related与prefetch_related)