zoukankan      html  css  js  c++  java
  • Django中ORM的优化

    1.

         exists( ) 什么时候用

         count( ) 和 len( )什么时候合适,

         用values( )或values_list( )只取需要的列的数据

        iterator()对数据对象生成迭代器,用一条取一条

    2.涉及关联查询的时候:

        select_related( ):

               直接通过SQL语句把关联的表通过join一起取出来。

        prefetch_related( ):

                把关联的表分别单独取出来,然后用Python进行join。

    3. QuerySet.defer() and only()

            只取表中id/name/age列,通过此方法查询的结果还是queryset,并且queryset内部为对象:

                           models.User.objects.all().only("id", "name", "age")

           不取表中的name列:

                          models.User.objects.all().defer("name")

    4.批量创建数据

                 bulk_create()

    总结

    ORM 的使用并没有固定的标准。对于小的应用来说,优化可能并没有多么明显的效果。应该以代码清晰为优先,然后在考虑优化的事情。程序增长过程中,对 ORM 的使用一定要保持好的习惯。养成对资源消耗敏感的习惯,以后会有很多好处。

    优化的方法很多,对于长远来说了解一些原则更为实用

    习惯隔离代码并记录产生的查询

    不要在循环中查询

    了解 ORM 是怎么缓存数据的

    知道 Django 何时会做查询

    不要以牺牲清晰度为代价过度优化

     参考:django orm框架性能优化 -https://blog.csdn.net/qq_39871740/article/details/79721120

    附:

    Django的orm官方说明文档:

    https://docs.djangoproject.com/en/1.10/topics/db/optimization/#retrieve-everything-at-once-if-you-know-you-will-need-it

    【Django ORM性能优化,数据存取优化 - 吾星喵 - 简书】https://www.jianshu.com/p/aded5b2029f6

  • 相关阅读:
    拍照
    ORACLE DATABASE 10G FALSHBACK 知识整理
    在webx.ml中 配置struts2 后 welcome-file-list 失效的解决办法
    基于内容的图像检索技(CBIR)术相术介绍
    Codeforces Round #198 (Div. 2) B. Maximal Area Quadrilateral
    终端复用工具tmux的使用
    泛型的使用
    1.2.4 Java Annotation 提要
    Java算法--串的简单处理
    【基础练习】【线性DP】codevs3641 上帝选人题解
  • 原文地址:https://www.cnblogs.com/qvpenglou/p/11779934.html
Copyright © 2011-2022 走看看