请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如何写亮点?

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

你能具体讲讲怎么优化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回答

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

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉3573892 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-08-12 10:16:56
  • 提问者 慕粉3573892 #2
    《高性能mysql》目前适合我吗?是不是做数据库开发或者维护的才需要看。做后端的需要吗?我现在的基础是鱼书过了两遍,知道常用的程序设计思想,学过数据结构和算法。
    回复 有任何疑惑可以回复我~ 2020-08-12 10:18:42
  • 7七月 回复 提问者 慕粉3573892 #3
    合适的,这个书很好
    回复 有任何疑惑可以回复我~ 2020-08-12 16:10:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信