gpt4 book ai didi

mysql - 从按日期排序的多个表中获取最后 n 条记录的有效方法(事件的用户日志)

转载 作者:行者123 更新时间:2023-11-30 22:15:32 25 4
gpt4 key购买 nike

我需要从 m 表中获取最后的 n 记录(比如说 m=n=~10现在)按日期排序(也支持偏移量会很好)。这应该向用户显示他的最后一个事件。这些表将主要包含该用户的成百上千条记录。我怎样才能做到最有效的方式?我正在使用 Doctrine 2,这些表彼此没有关系。

我虽然有一些解决方案但不确定什么是最好的方法:

  1. 创建单独的表并将记录放在那里。如果发生任何变化(如果用户在系统内部进行任何应该显示在日志表中的更改),它将被插入到该表中。这应该很快,但很难管理,我还不想使用这种方法。
  2. 从每个表中获取最后的 n 条记录,然后对它们进行排序(从数据库中取出)并限制为 n。这似乎非常简单,但是如果有更多的表,就会有相当高的开销。对于 10 个表,90% 的记录将被丢弃。如果使用offset,那就更糟了。这也意味着 m 个查询。
  3. 创建单个 native 查询并获​​取最后 n 项的 idtype 并合并所有表。像 SELECT id, date, type FROM (SELECT a.id, a.date, 'a' AS type FROM a ORDER BY a.date DESC LIMIT 10 UNION b.id, b.date, 'b' AS type ORDER BY b.date DESC LIMIT 10) ORDER BY date DESC LIMIT 10.然后创建至多 m 查询来获取这些实体。这应该比 2. 好一点,但需要 native 查询。

有没有其他方法可以获取这些记录?

谢谢

最佳答案

  1. 并不难管理,它只是您为“操作”表所做的每个插入的额外插入。

我猜你也可以通过使用触发器来解决这个问题,这样你甚至不必在应用程序代码中实现它。 https://stackoverflow.com/a/4754333/3595565

  1. 不会是“从每个表中获取特定用户的最后 n 记录吗?所以我认为这种方法不会有太多问题,但我也认为这是最不理想的处理方式。

  2. 类似于第二个选项,但数据库会处理排序,这使得这种方法更加可行。

结论:(基于意见)

你应该在选项1和3之间选择,主要问题应该是

  • 是否可以存储冗余数据

  • 在您的应用程序之外和您的数据库(触发器)内部拥有逻辑是否可以?

使用日志表会使事情变得非常简单。但是你会重复数据。

如果您可以使用触发器来填充日志表,事情会更简单,但它也有缺点,因为它需要额外的文档等。所以没有人想知道“数据从哪里来?”

关于mysql - 从按日期排序的多个表中获取最后 n 条记录的有效方法(事件的用户日志),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38419514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com