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`
看到是只是查询了一个表,但是我们可以用外键点出来外键里面的东西。
热门推荐
贪嗔痴:如何摆脱心灵枷锁?
广州地铁:安全教育创新与应急处理的典范
地铁应急逃生设备使用指南:关键时刻救命!
当华容道遇上地铁逃生:安全教育的创新之路
张志杰事件后,这些心脏急救知识你必须知道!
夏日炎炎,用火焰树花来降火吧!
火焰树花:从观赏到药用的多重价值
西双版纳美食攻略:从傣味烧烤到特色手抓饭,还有详细游玩建议
云南火焰花:从美食到良药,一株植物的多重价值
非遗美食扬州炒饭:三大灵魂打造舌尖上的经典
扬州炒饭的营养大揭秘:学生党必看!
《舌尖上的中国》揭秘扬州炒饭:从皇家御膳到非遗美食
怀孕八个月胎动很厉害?医生这样说
高速路上,使用定速巡航和用脚踩油门,哪种方式更加省油?
《长安十二时辰》教你古装摄影配色秘籍
古装剧爆火!教你拍出最美古装儿童照
南昌儿童古装摄影:如何拍出古风大片?
跟奥运冠军武大靖一起练短道速滑体能!
卢道熙零下20度训练引关注,亚冬会短道速滑赛事今日开赛
亚冬会短道速滑收官战今日上演!林孝埈领衔中国队冲击四金
故宫博物院99岁生日:揭秘千年宫殿的建筑奥秘
泰坦陨落2强力泰坦装备哪个好
亚冬会|新闻分析:100金的投影与昭示
黄痰是热,白痰是寒?医生提醒:咳出4类痰液,或要留意肺部健康
遍地开花的光储充一体化:国资“买单”,民企捞金
定速巡航系统:功能、类型及使用指南
定速&自适应巡航为何在高速上难用
亚冬会短道速滑:朱祎玎力克李有彬,夺得1500米金牌
叙事疗法助你应对胆囊切除后的情绪波动
哈尔滨体院黑科技助力亚冬会短道速滑