zoukankan      html  css  js  c++  java
  • Django之DB数据库优化

    Django之DB数据库优化

    取所有书的书名

    res = models.Book.objects.values("title") #拿到的是一个列表套字典

    还要for循环再res.get("title")

    res=models.Book.objects.only("title")

    拿到的是Book对象列表,此Book对象只封装了书名title属性

    此时你可以i.price尽管Book对象里面没有封装price,但是仍然可以查到,但是会重新去DB里面查询

    only括号里面没有的字段,会重新查询

    res=models.Book.objects.all()

    查到的对象,已经有了对象所有的属性,想查什么就查什么,不会再走数据库。

    defer()

    res=models.Book.objects.defer("title")

    拿到的仍是数据对象,他与oble()刚好相反,defer括号内放的字段不在查询出来的对象里面

    想查询title字段,必须重走数据库,而如果查询的是非括号内字段,不再走数据库,可以直接.来获得。

    select_related和prefetch_related 与跨表有关

      这里从book表,跨表查看出版社名字。会导致查出来的Book对象,每个都去跨表查一次出版社名

    res=models.Book.obejcts.select_related("publish")

    print(res)

    这样网络请求少了,数据IO少了,相当于进行了优化,但是表如果很大,那么拼表的耗时会很长。

    select_related里面只能放外键字段。只能放一对一和一对多

    不能放多对多

    pretch_related

    多表操作除了连表操作,还可以用子查询,一张表的查询结果,当做领一张表的查询条件,比连表查询多了一次查询

    子查询虽然查询次数多,但是单表先查询可能1秒,加起来2秒,不一定就慢于连表的时间,一定要看实际情况。

    使用者感觉不出来两个方法的区别,只是内部的原理不同。

    看十遍不如自己写一遍!巩固基础,纵横开拓!
  • 相关阅读:
    docker compose 配置 redis cluster jenkins
    Spring Core
    Java Case Interview two
    pytest 生成 allure报告(含4要素的对应版本,兼容)
    python中requests库的post请求 4种类型参数
    接口测试流程
    Docker学习篇 搭建jenkins
    Pytest入门 实例
    python selenium css定位6种
    python selenium select标签的下拉框和非select标签的下拉框
  • 原文地址:https://www.cnblogs.com/gyxpy/p/14733645.html
Copyright © 2011-2022 走看看