首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nockyQ
V2EX  ›  程序员

面试最后一问把我整懵了

  •  1
     
  •   nockyQ · 115 天前 · 14610 次点击
    这是一个创建于 115 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    111 条回复    2020-04-19 22:07:36 +08:00
    1  2  
    herozzm
        101
    herozzm   115 天前 via Android
    换 es,游标查询,说索引的确实不妥,数据量大翻页会翻死
    Tokin
        102
    Tokin   114 天前   ❤️ 1
    这个当时在做一个项目数千万数据翻页的时候,当时越靠后的数据查询越慢,分表、加索引效果不佳,后来是通过 IN 查询解决的,效果可以说是立竿见影,原本最慢要几分钟查出来,后来改完基本就瞬间出结果了。
    分页的话还是慎用 limit
    lucky215
        103
    lucky215   114 天前
    这个要看需求到什么程度,如果真有可以离线的数据那还好,mysql 把计算结果记录下来就行,但是如果数据是要实时聚合计算的,可能还是上 es 比较好些,缓存和索引的优化成本会比较高
    aunox
        104
    aunox   114 天前
    @Tokin 你说的改成“通过 IN 查询解决的”,是什么样的?
    popvlovs
        105
    popvlovs   114 天前
    这种深分页的问题 ES 也很难解,一般这种情况下都是要妥协的,比如限制只能够分页展示前 10000 条,要么就用 search_after 做成滚动加载的之类,实际上大部分场景下需要查询级千万条数据所在的分页根本就是个伪需求,根本不用费心考虑技术上的优化方案.....
    Tokin
        106
    Tokin   114 天前
    @aunox select * from table where `id` in (1,2,3);
    这样,没用子查询,就代码生成一个 ID 数组,然后查出来就好了
    yrj
        107
    yrj   114 天前 via iPad
    如果楼主亲自尝试过大数据分页,就不会只回答索引了。
    nockyQ
        108
    nockyQ   113 天前
    @yrj

    来都来了,指导一下呗
    Tokin
        109
    Tokin   113 天前
    @nockyQ 就是索引、分表、缓存、部分业务可以 IN 查询。
    而且有些业务年报是可以先每月生成当月的月报,到统计年报的时候把月报的数据统计成年报就好了。
    947211232
        110
    947211232   113 天前
    没具体的,那方向可多了,0 、索引; 1 、缓存; 2 、分表; 3 、引擎、隔离级别; 4 、堆硬件; 5 、重启试一试 :)
    realpg
        111
    realpg   113 天前
    @nockyQ

    你自己弄个数据库 写个存储过程生成几亿条数据 亲自实验一下 就知道面试官说的还是慢是啥意思了

    你的状态并不是你不知道怎么解决“还是慢” 在面试官看来 你连数据量较大会慢这种事儿都没经历过
    1  2  
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4251 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:40 · PVG 11:40 · LAX 20:40 · JFK 23:40
    ♥ Do have faith in what you're doing.