面试最后一问把我整懵了

2020-04-17 12:15:46 +08:00
 nockyQ

今天面试的最后一道问题。

内容是做年度数据报表,千万级的数据量需要在屏幕上分页展示。目前问题是查询太慢该如何解决。 我的回答是加索引。结果面试官的回答是:“还是慢。”把我整懵不知道怎么回答了。解决查询慢的关键真的不是索引吗?…

在此求教万能的 V 友们 (:з」∠)

18591 次点击
所在节点    程序员
111 条回复
rrfeng
2020-04-17 12:18:45 +08:00
就说不知道。
warlock
2020-04-17 12:19:00 +08:00
缓存
ConradG
2020-04-17 12:20:14 +08:00
我比较好奇这屏幕有多大
sunjourney
2020-04-17 12:20:56 +08:00
分析业务啊,分离 hot/cold 数据,要聚合的提前聚合了,分组存储,根据查询条件归约
Tianao
2020-04-17 12:21:17 +08:00
改模式、换引擎、加硬件。
fordoo
2020-04-17 12:22:13 +08:00
数据报表,报表不都是汇总数据, 千万级?
optional
2020-04-17 12:22:20 +08:00
分页慢,不能用 limit offset 分页。 用 id 分页
OSDI
2020-04-17 12:23:34 +08:00
加配置
ylsc633
2020-04-17 12:26:19 +08:00
年度数据 都是汇总啊.......... 年度按照月份汇总 1
loryyang
2020-04-17 12:26:41 +08:00
都在内存里面就不会慢啊,你要是内存放不下就复杂了
nockyQ
2020-04-17 12:27:20 +08:00
@sunjourney 学到了 从这个方面考虑感觉很靠谱
nockyQ
2020-04-17 12:28:50 +08:00
@rrfeng 面试直接说不知道也太硬了 8
wangyzj
2020-04-17 12:28:58 +08:00
这道题可以回答的很开放
但是面试官感觉有限制在了一定的条件内
wangyzj
2020-04-17 12:30:03 +08:00
或者
select * from table where pkid > 10000 limit 0,50
这种呢
nockyQ
2020-04-17 12:32:29 +08:00
@wangyzj 或许我漏掉了关键因素?主要是我回答了建索引之后,告诉我还是很慢。然后也没做另补充,我就僵住不知道往哪个方面去回答了。目前这些条件下感觉只有建索引这种“空间换时间的方式”去实现。
angryfish
2020-04-17 12:38:18 +08:00
面试官显然目前是遇到这个问题了,你应该详细问下更具体的需求,一步步和面试官探讨。解决这个问题了,你就应聘上了。
index90
2020-04-17 12:42:34 +08:00
lz 有没有试过 skip 几万条数据,有多慢?
正确答案是改用 seek limit 方式。
xmge
2020-04-17 12:43:21 +08:00
自我感觉问题关键:这个问题的关键是分页查询时,当 offset 过大时引起的性能问题。

解决关键:减小 offset 的值。

解决方案:

1 、排序再查询 / where 语句后查询(通过各种手段把 offset 变小)

2 、分表。(业内流行 500w 一分)

3 、缓存


上述言论如果有错误的,望指正
binbinyouliiii
2020-04-17 12:43:29 +08:00
根据日期分表
nockyQ
2020-04-17 12:44:12 +08:00
@angryfish 是的。我感觉我当时确实应该再深挖一下需求,然后继续思考一下的。可能也是因为思绪断掉开始紧张了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX