zoukankan      html  css  js  c++  java
  • orm数据库查询优化和数据库三大设计范式

    orm数据库查询优化

    only与defer	
    select_related与prefetch_related
    
    
    orm语句的特点:只有用到了查询结果的变量,才走数据库。如果,没用到就不走数据库。
    
    res = models.Book.objects.values('title')
    
    # only与defer
    
    res = models.Book.objects.only('title')
    only:拿到的是指定字段的数据,如果需要该数据,不用走数据库,其它字段的数据要走数据
    
    res = models.Book.objects.defer('title')
    defer:defer与only刚好相反,对象除了没有title属性之外其他的都有
    
    .all()  一次全部查出,本表有的不用走数据库
    
    
    res = models.Book.objects.all()
        for i in res:
            print(i.publish.name)  # 每循环一次就要走一次数据库查询,这是本表的外键字段的表
            
    # select_related与prefetch_related
    res = models.Book.objects.select_related('authors')  # INNER JOIN
    select_related:
        相当于 inner join 后,再查;括号内只能放外键字段  一对多 一对一 ;多对多不行;这个时候对象无论是book表的数据还是publish的数据都无需再走数据库查询了
        括号内可以放多个外键字段
    			select_related(外键字段1__外键字段2__外键字段3__...)
    
    res = models.Book.objects.prefetch_related('publish')  # 子查询
    
    prefetch_related:prefetch_related该方法内部其实就是子查询,将子查询查询出来的所有结果也给你封装到对象中.给你的感觉好像也是一次性搞定的
    

    数据库三大设计范式

    数据库三大设计范式:
    对数据在数据库中的存储进行规范,减少数据之间的冗余,耦合。
    什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。
    
    第一范式:1nf,每个字段都不可再分割为多个字段,原子性
    第二范式:2nf,满足第一范式,所有 非主键字段,都依赖 主键字段;数据列中出现数据重复,就要把表拆分
    第三范式,3nf,满足第二范式,所有 非主键字段,都直接依赖 主键字段,而没有间接依赖
    
    三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。
    
    参考博客:
    https://www.cnblogs.com/knowledgesea/p/3667395.html
    https://blog.csdn.net/dosthing/article/details/87954213
        
    4.利用ajax完成数据的二次确认删除
    
  • 相关阅读:
    ASM实例远程连接
    ASM实例修改SYS密码
    监听lsnrctl status查询状态报错linux error 111:connection refused
    使用UTF8字符集存储中文生僻字
    Eclipse的概述
    java内部类
    Java----main
    移动客户端系统升级思路
    网站 压力测试。。检测 cdn 路由追踪 网速测试
    php实现树状结构无级分类
  • 原文地址:https://www.cnblogs.com/pythonwl/p/13032179.html
Copyright © 2011-2022 走看看