only与defer
only括号内放字段 查询结果是一个列表套一个个的数据对象
这些数据对象点括号内的字段属性不会再查询数据库 直接就是对象获取属性
也支持点击括号内没有的字段 但是每点击一次就会重新走一次数据库查询 效率极低
defer与only是互为反操作
defer括号内放什么字段 查询出来的对象就没有该字段属性
如果你要点击 每点击一次就要重新走一次数据
而你如果点击了非括号内的字段 就不会走数据库 仅仅是对象属性的操作
select_related与prefetch_related
select_related与prefetch_related
select_related括号内只能放外键字段 并且外键字段的类型只能是一对多 或者 一对一 不能是多对多
内部是自动连表操作 会将括号内外键字段所关联的表 与当前表自动拼接成一张表
然后将表中的数据一个个查询出来封装成一个个的对象
这样做的好处就在于跨表也不需要重复的走数据库了 减轻数据库的压力
select_related括号内可以放多个外键字段 都号隔开 会将多个外键字段关联的表与当前表全部拼成一张大表
耗时:数据库层面需要先连表
prefetch_related内部是子查询
会自动帮你按步骤查询多张表 然后将查询的结果封装到对象中
给用户的感觉好像还是连表操作
括号内支持传多个外键字段 并且没有类型限制
特点:每放一个外键字段 就会多走一条sql语句 多查询一张表
耗时:查询的次数长
两者之间的优缺点
结合实际情况 表的大小
两张表都特别大的情况下 连表操作 可能耗时更多