Django--几个重要方法优化(面试重点)

查询优化(面试重点****)

only与defer

"""
only的优化就是会将括号内的字段对应的值封装起来返回给你的对象中,只要你点了这个字段 就不需要再走数据库了
但是你要是点的不是括号内的字段,还是会频繁的走数据库的查询
defer则是相反,它是括号以外的字段对应的数据封装起来返回给你的对象中,只要你点了括号内的字段就会频繁的走数据库查询,但是点括号内以外的字段,就不会频繁走数据库查询
"""
res = models.Book.objects.only('name')
for r in res:
    print(r.name)


res = models.Book.objects.defer('name')
for r in res:
    print(r.name) #频繁走数据库查询


代码 图片
select:
https://images2018.cnblogs.com/blog/1342004/201807/1342004-20180707190651556-702396876.png

prefetch:
https://images2018.cnblogs.com/blog/1342004/201807/1342004-20180707192517858-1910038173.png

性能对比:
select 是表之间进行join链表操作,一次性获取所有的关联的数据.
prefetch: 多表连表操作速度变慢,因为执行多次SQL查询在Python代码中实现连表操作

优化方式及应用
select:针对一对一,一对多关系进行优化,SQL的join语句进行的优化,通过减少SQL查询的次数进行优化,提高性能.

prefetch:多对多字段,可以使用它来进行优化.内部不做连表,消耗资源在查询次数上,方式主要是分别查询每个表.

update()与save()的区别

两者都是对数据的修改保存操作,但是save()函数是将数据列的全部数据项全部重新写一遍,而update()则是针对修改的项进行针对的更新效率高耗时少

所以以后对数据的修改保存用update()

posted @ 2019-10-29 17:33  Huise.J  阅读(237)  评论(0编辑  收藏  举报