• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tctc4869
V2EX  ›  程序员

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

  •  
  •   tctc4869 · Jul 6, 2020 · 1011 views
    This topic created in 2227 days ago, the information mentioned may be changed or developed.

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

    需求:查询某用户最近的购买 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 replies    2020-07-06 15:19:46 +08:00
    opengps
        1
    opengps  
       Jul 6, 2020
    只要能按预期走索引,数据量在大到需要分表的程度之前,似乎没啥需要你担心的。我的第一版 sqlserver 的线上 gps 轨迹库从十几亿行数据里取一次取 1000 条毫无延迟表现。

    怕数据量大出问题,就从一开始尽可能规避 join,让单表的功能足够单一的去读写
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5543 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:37 · PVG 14:37 · LAX 23:37 · JFK 02:37
    ♥ Do have faith in what you're doing.