如何高效运用Django的prefetch_related()函数优化数据库查询?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2986个文字,预计阅读时间需要12分钟。
目录+前言+使用方法+*lookups+参数+Prefetch对象+最佳实践+选择哪个函数+小结+总结+前言+关于多对多字段(ManyToManyField)和一对多字段,可以使用prefetch_related()来优化+prefetch_related()和select_related()
目录
- 前言
- 使用方法
- *lookups 参数
- Prefetch对象
- 最佳实践
- 选择哪个函数
- 小结
- 总结
前言
对于多对多字段(ManyToManyField)和一对多字段, 可以使用prefetch_related()来进行优化
prefetch_related()和select_related()的设计目的很相似,都是为了减少SQL查询的数量,但是实现的方式不一样。后者是通过JOIN语句,在SQL查询内解决问题。但是对于多对多关系,使用SQL语句解决就显得有些不太明智,因为JOIN得到的表将会很长,会导致SQL语句运行时间的增加和内存占用的增加。若有n个对象,每个对象的多对多字段对应Mi条,就会生成Σ(n)Mi 行的结果表。
本文共计2986个文字,预计阅读时间需要12分钟。
目录+前言+使用方法+*lookups+参数+Prefetch对象+最佳实践+选择哪个函数+小结+总结+前言+关于多对多字段(ManyToManyField)和一对多字段,可以使用prefetch_related()来优化+prefetch_related()和select_related()
目录
- 前言
- 使用方法
- *lookups 参数
- Prefetch对象
- 最佳实践
- 选择哪个函数
- 小结
- 总结
前言
对于多对多字段(ManyToManyField)和一对多字段, 可以使用prefetch_related()来进行优化
prefetch_related()和select_related()的设计目的很相似,都是为了减少SQL查询的数量,但是实现的方式不一样。后者是通过JOIN语句,在SQL查询内解决问题。但是对于多对多关系,使用SQL语句解决就显得有些不太明智,因为JOIN得到的表将会很长,会导致SQL语句运行时间的增加和内存占用的增加。若有n个对象,每个对象的多对多字段对应Mi条,就会生成Σ(n)Mi 行的结果表。

