Django连表查询性能优化详解
创作时间:
作者:
@小白创作中心
Django连表查询性能优化详解
引用
CSDN
1.
https://blog.csdn.net/python113/article/details/121316459
回顾之前的外键查询
之前有两个表,利用外键关联:
就是通过一个字段点出来的。循环获取数据,再获取外键里面的数据的时候,会再次的执行sql语句进行数据库的查询。所以,性能不好,能不能在查询数据的时候,就把外键关联的另一个表里面的数据也查询出来呢?就不需要在要拿外键数据的时候再次的查询。
第一个方法
用value(),将要拿的外键字段放到里面。但是这个查询出来的值的类型是字典类型。如果不想要查询出来的是字典类型,还想提高性能,如何做?
第二个方法(select_related()连表查,性能差)
数据多,用这个。那么这样写查询的sql语句是什么:
SELECT
`myfirst_article`.`id`,
`myfirst_article`.`title`,
`myfirst_article`.`content`,
`myfirst_article`.`category_id`,
`myfirst_article`.`createtime`,
`myfirst_article`.`updatetime`,
`myfirst_category`.`id`,
`myfirst_category`.`name`
FROM
`myfirst_article` INNER JOIN `myfirst_category`
ON (`myfirst_article`.`category_id` = `myfirst_category`.`id`)
也就是用INNER JOIN 进行关联查询。也就是在第一次查询的时候主动做连表。连表会慢,效率低。
第三个方法(prefetch_related()多次单表查,性能高)
数据多用这个:
SELECT
`myfirst_article`.`id`,
`myfirst_article`.`title`,
`myfirst_article`.`content`,
`myfirst_article`.`category_id`, `myfirst_article`.`createtime`,
`myfirst_article`.`updatetime`
FROM `myfirst_article`
看到是只是查询了一个表,但是我们可以用外键点出来外键里面的东西。
热门推荐
固溶时效对TB6钛合金锻件组织和性能的影响
钛合金零件去应力退火:热处理领域的高精尖工艺大揭秘
刘云:晚清铜版印刷探考——以宁波民间中日汉籍出版为例
调理新陈代谢的五大方法
甲钴胺与叶酸的区别及关联
全面解析Calibre的LVS反馈处理:提升验证准确性的秘诀
牧野之战发生在什么时期?牧野之战成功的原因是什么?
家常辣椒做法大全,轻松学会
上杭乌梅,传统技艺酝酿悠久梅香
高盛:是时候启动“A计划”,小盘股可能表现更佳
南宁市美食探秘:必尝的十大地方特色佳肴
“豪门痞女”何超仪自曝遗产超百亿:离经叛道却为何是赌王最爱?
刘艳红等- JAAS:XRF和LA-ICP-MS快速测定全岩主微量元素
感冒时打喷嚏是病情好转还是加重?一文读懂这个常见症状
投资与投机的深度剖析:明辨两者的界限
2024年12月乘用车市场销量数据出炉:整体销量超263万辆,新能源车表现亮眼
什么是营销策划公司
如何使截屏的图片变得清晰
从马斯克“三星”布局看博弈:卫星互联网龙虎战或在中美间展开
低成本DIY全屋智能家居:打造舒适便捷生活的实用指南
昆明石林值不值得去?3大理由,带你领略奇石之美!
《科学》:浙大团队破解大脑高效节能谜团!大脑“吃饱”才能抗衰
互利共赢 树立典范(中法建交60周年系列报道·科技篇①)
五福临门:中国人追求的五种福气
冬至青岛迎来今冬首场雪,崂山再现雾凇奇观
什么是负载均衡之LVS?详解其工作原理与应用
什么是负载均衡之LVS?详解其工作原理与应用
郑州城隍庙:一座承载历史记忆的明清古建筑群
木兰围场自驾游攻略——带你走进塞北草原的风情与魅力
土壤酸化致使养分流失