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

2020-07-06 14:42:54 +08:00
 tctc4869

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

需求:查询某用户最近的购买 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 的方式有什么问题呢。

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

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

怕数据量大出问题,就从一开始尽可能规避 join,让单表的功能足够单一的去读写

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

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

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

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

© 2021 V2EX