我需要从n
表中获取最后m
个记录(现在让我们说m
= n
= ~10)按日期排序(也支持偏移量)尼斯)。这应该向用户显示他的上一次活动。这些表将包含该用户的大部分数百或数千条记录。
我怎样才能以最有效的方式做到这一点?我正在使用Doctrine 2,这些表彼此没有关系。
我虽然对某些解决方案不确定最佳方法是什么:
n
个记录,然后对它们进行排序(从DB中排除)并限制为n
。这看起来非常简单,但是有更多的表会有很高的开销。对于10个表,90%的记录将被丢弃。如果使用偏移,则会更糟。这也意味着m
查询。id
项的type
和n
。像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.好一点,但需要原生查询。有没有其他方法可以获取这些记录?
谢谢
答案 0 :(得分:0)
您也可以使用我猜测的触发器解决此问题,因此您甚至不必在应用程序代码中实现它。 https://stackoverflow.com/a/4754333/3595565
不会是每个表中的特定用户获得最后node-mongodb-native
条记录吗?因此,我不认为这种方法存在很多问题,但我认为这是处理事情的最不理想的方法。
就像第二个选项,但数据库处理排序,使这种方法更加可行。
结论:(基于意见)
您应该在选项1和3之间进行选择。主要问题应该是
可以存储冗余数据
可以在应用程序之外和数据库内部使用逻辑(触发器)
使用日志记录表会使事情变得非常简单。但是你会复制数据。
如果您可以使用触发器来填充日志记录表,事情就会变得更简单,但它有缺点,因为它需要额外的文档等等所以没有人想知道"数据在哪里来自?"