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

面试最后一问把我整懵了

  •  1
     
  •   nockyQ · 2020-04-17 12:15:46 +08:00 · 18470 次点击
    这是一个创建于 1668 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    你的状态并不是你不知道怎么解决“还是慢” 在面试官看来 你连数据量较大会慢这种事儿都没经历过
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2683 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:45 · PVG 14:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.