zoukankan      html  css  js  c++  java
  • djange数据库优化操作

    一、all()命令分析

            1、user_list = models.UserInfo.objects.all()    #查询表一次可以得到该表的所有信息

        注释:user_list.query可以查询到原生sql语句

      2、存在问题

         for row in user_list:
                    row中只去取当前表数据,如果需要取外键对应的表中的数据(连表查询),那么取多少次就查询多少次,大大降低了查询效率
         3、解决办法

        1、方法1:values方法

          user_list = models.UserInfo.objects.values(....)     #可以通过values的方式连表查询一次性取出所需要的内容(只去取当前表数据和FK表关联字段)

        2、方法2:select_related主动连表方法
                  user_list = models.UserInfo.objects.all().select_related('FK字段')

          #user_list = models.UserInfo.objects.all().select_related('FK字段1','FK字段2','FK字段3')    #对多个外键字段主动连表查询

          #user_list = models.UserInfo.objects.all().select_related('FK字段__关联表字段')    #只能对一对一,一对多表使用不能对多对多表使用
                    for row in user_list:
                   row中只去取当前表数据和FK表关联字段
             3、方法3:由于连表降低性能所以通过 prefetch_related方法不主动连表
                    user_list = models.UserInfo.objects.all().prefetch_related('FK字段1','FK字段2','FK字段3')
                  
            4:补充:
            1、only只取某个字段
                # user_list = models.UserInfo.objects.all().only('name') 

        2、defer排除当前字段   
                # user_list = models.UserInfo.objects.all().defer('name') 
            
       

  • 相关阅读:
    JAVA程序员面试32问
    在做物流的库存管理系统里,需要注意。。。。。
    在写自动更新程序中出现的问题
    数据库设计中的五个范式
    cPickle / pickle
    python总结1
    python总结2
    汉明距离(Hamming distance)
    python中pickle的用法
    NET面试题
  • 原文地址:https://www.cnblogs.com/xuanan/p/7569915.html
Copyright © 2011-2022 走看看