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`
看到是只是查询了一个表,但是我们可以用外键点出来外键里面的东西。
热门推荐
你蒸的包子又硬又塌皮?包子铺老板:记住3个小妙招,香软又美味
古代亲属关系与“五服”制度
小包裹发美国要多少物流费
北京外卖员深夜见义勇为获表彰
沟通与理解,让爱情更长久
木地板保养方法及选购指南
唐初有个李元霸,唐末有个李存孝,都是恨天无把,恨地无环
示波器高级功能解析:触发、滤波与数学运算
提升效率的 20 个实用 Windows 11 键盘快捷键,轻松掌控操作
武汉灵活就业者住房公积金开户全流程线上化
过敏源有必要查90项吗?
这种贫血会遗传!如何预防?这件事一定要做→
瓷砖薄贴法:原理、优势及与传统贴法的对比
日本最具争议性电影《杀手阿一》:新宿黑夜下的扭曲复仇与人性深渊
设计师必懂的16种常见楼梯
计算机视觉——基于改进UNet图像增强算法实现
倍他司汀可以长期服用吗
【工艺知识】喷丸对材料表面有何影响?一文搞懂
公司注销前的三大关键问题:不实缴处理、法人责任与账目结算
光敏性癫痫:定义、症状、诊断与预防
市场指数长期失真,应重新设立A股成份股指数取代上证指数
汗疱疹脱皮干裂怎么办
多种地板类型及选购注意事项解析
王维:唐代诗人的成就与影响
宁夏中卫全域风光游览攻略:沙漠奇观与丝路文化之旅
重庆2025年将新增4所学校,提供万余学位
认识催眠需要先体验催眠
国学小知识丨论语知识点get!
心理学:反向形成,其实就是在回避深度自我觉察
香港鸭脷洲街坊学校:70年办学经验,全方位培养学生的潜能与品格