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

要查询一个数据表的限定数量的最近的插入记录,特定的最近插入的记录,这个比较好的实现方案有哪些

  •  
  •   tctc4869 · 2020-07-06 14:42:54 +08:00 · 587 次点击
    这是一个创建于 1361 天前的主题,其中的信息可能已经有所发展或是发生改变。

    举个例子,查询用户购买记录表

    需求:查询某用户最近的购买 10 个的记录,查询某用户购买记录表的某某字段为 XXX 的最近的 6 个记录,查询某用户最新的一个购买记录。这 3 个查询的结果集,未来有可能会需要展示到同一个界面上。

    这个查询需求怎么实现最好呢?各位有哪些实现方式?各位觉得直接在 select 上写 where+order by+Limit 合适么,我感觉直接在 select 上写 limit+order by+where 有点不放心,万一数据量大怎么办?

    我的话,在 Postgresql 是这样的搞,建立一个表叫“user_last_buy_record”。主键是用户 id,还有三个字段,第一个叫 last_array 和第二个叫 last_xxx_array,这两个数据类型都是长整型数组,第三个叫 last_new,数据类型是长整型。

    每次插入用户购买记录时,会把插入的 id 修改到 user_last_buy_record 表的 last_array 里,更新 last_array 字段,如果插入的数据中的某字段为 XXX,则把插入的 id 修改到 last_xxx_array 。( last_xxx_array,last_array,把数组的元素位置从第二位开始都往后挪,最终倒数第二个替换掉倒数第一个,然后把新的值修改到数组的第一个位置)

    查询时通过 user_last_buy_record 表记录的主键 id 去 left join 查询,相比 where+limit+order by 的方式有什么问题呢。

    对于这个需求,各位觉得有哪些更合适的实现方式呢?

    1 条回复    2020-07-06 15:19:46 +08:00
    opengps
        1
    opengps  
       2020-07-06 15:19:46 +08:00
    只要能按预期走索引,数据量在大到需要分表的程度之前,似乎没啥需要你担心的。我的第一版 sqlserver 的线上 gps 轨迹库从十几亿行数据里取一次取 1000 条毫无延迟表现。

    怕数据量大出问题,就从一开始尽可能规避 join,让单表的功能足够单一的去读写
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3263 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 11:50 · PVG 19:50 · LAX 04:50 · JFK 07:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.