如何写亮点?

来源:11-8 我的礼物 三 (不要在函数中返回元组,而应该返回字典)

慕粉3573892

2020-08-11

七月老师,我现在是第二遍学这课,现在在准备面试,听一个讲面试的课,说要准备项目的技术亮点。我觉得这个优化数据库查询是个不错的可以提炼的点,下面是这写的,你觉得怎么样,可以提点优化的建议吗,先谢谢老师了!

你能具体讲讲怎么优化mysql查询的吗?

先通过uid查询,拿到这个uid的所有gifts,这是一次查询,前端查询每本书的时候,它都要通过这本书的isbn来查询有多少人想送这本书给你,这个技术的好处在于,代码写起来简单。但它的问题在于,用户想送多少本书,不是你能控制的。如果它想送一万本,那么就要去数据库查询一万次,去数据库查询一万次是很费时间的。所以,为了解决这个问题,我想到可以换一种思路。减少去数据库查询的次数,这个技术方案的不好的地方是代码就没那么简捷。不过我还是选择重构下,我不能容忍这种不可控的因素。具体思路就是:
拿到当前用户的所有gift对象列表
得到一个列表,这个列表是用户的gift对象的isbn列表
得到一个列表,这个列表里面是字典,字典有两个键值对,一个count,一个isbn


这相当于什么呢?之前是每本书都去查询一次数据库,现在的思路是,我先去数据库里拿到所有gift,然后通过一个列表生成式拿到一个isbn的列表,再通过这个isbn列表去数据库里拿到一个列表,这个列表时每一个元素是字典,一个count对应一个isbn,就是一次性地拿到所有书籍的wish_count,这个可以通过db.session.query来实现。

count_list = db.session.query(func.count(Wish.id), Wish.isbn).filter(
            Wish.launched == False,
            Wish.isbn.in_(isbn_list),
            Wish.status == 1).group_by(
            Wish.isbn).all()

最后再构造一个转换类,用拿到的这个列表,和我的礼物列表,组装成前端需要的数据。

我打个类比,这相当于什么呢?这就相当于点餐,本来公司每个人都要跑去馆点一份菜,现在你提出来,先把要点餐的人记录下来,列成列表,再派一个人一次性的把公司100份的饭买回来

写回答

1回答

7七月

2020-08-11

面试数据库优化确实是一个很好的点,但你刚刚这个说的不算是数据库的查询优化。

查询优化包括建立索引,减少join,使用in查询,建立索引树等等很多的和mysql有关和业务不太有关系的优化

建议可以看看高性能的mysql这本书,对面试很有帮助

0
4
慕粉3573892
回复
7七月
再问下老师,你说这个不算数据库查询优化,那简历里面把这节课的优化做为项目中一个亮点,应该写什么呢
2020-08-19
共4条回复

Python Flask高级编程之从0到1开发《鱼书》精品项目

7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程

2735 学习 · 1267 问题

查看课程