面试最后一问把我整懵了

2020 年 4 月 17 日
 nockyQ

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

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

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

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

解决关键:减小 offset 的值。

解决方案:

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

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

3 、缓存


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

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

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

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

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

© 2021 V2EX