如何使新闻提供“友好”的数据库设计,以便将所有项目(查询)放入新闻Feed中并不是非常昂贵?我能想到的唯一方法是将UNIONing几乎每个表(代表组,注释,朋友等)和获取日期等等,这似乎是为每个用户运行一个非常昂贵的查询,它很难将这样的东西缓存到每个人的不同之处。
答案 0 :(得分:12)
首先,考虑做一个性能原型来检查你的预感,工会太贵了。你可能会过早地优化那些不是问题的东西。
如果这是一个真正的问题,请考虑一个纯粹用于保存事件源数据的表,该表必须与其他表并行更新。
E.g。创建注释记录时,还要在事件表中创建一个事件记录,其中包含日期,描述和用户。
考虑根据UserId(或UserId和Date)索引Event表。还可以考虑在不再需要时清除旧数据。
这不是规范化的架构,但如果频繁操作事件源可能会更快。
答案 1 :(得分:2)
如果没有架构,很难回答这个问题,但我的预感是,涉及10个或更多正确索引表的UNION是没有的:
像wordpress或PHPBB这样的典型LAMP应用程序每页浏览都会运行10个以上的查询而不会出现问题。所以别担心。
答案 2 :(得分:2)
UNION =昂贵,因为完整的结果集受DISTINCT操作的约束。 UNION ALL =更便宜,因为它实际上是多个查询,每个查询的结果都附加在一起。
这取决于数据量或过程。
效率的主要驱动因素是联合在一起的各个查询,但是没有理由为什么从10个表中选择最近的(比方说的)10个记录应该花费超过一小部分时间。