我有一个具有简单父子结构的表
products:
- id
- product_id
- time_created
- ... a few other columns
如果product_id为NULL,则为父级。产品ID在这里表现得像parent_id。内部数据如下所示:
id | product_id
1 NULL
2 1
3 1
4 NULL
4 4
此表每晚都会更新新版本。
每个用户都使用了很多这些产品,但只有一个版本。如果为product_id添加了新行,则会通知用户。
他可以停止使用id:2并开始使用id:3。另一个用户将继续使用id:2等。
产品表每晚更新,并且增长速度非常快。目前大约有500000行,每晚增加大约20000行,每年大约有5-7000000个变化(新行)。
有没有办法优化这个数据库/表结构?我该改变什么吗?在一个表中有这么多数据是一个问题吗?
答案 0 :(得分:1)
你的问题不明确。样本数据表明父子关系只有一个层次。如果是这样,这不是一个特别难的问题。您可以创建查询以查找每个产品的最新产品ID - 我假设这是具有最大id
的产品ID:
select id, product_id,
max(id) over (partition by coalsesce(product_id, id)) as biggest_id
from table t;
这是一个查找表,以获得最大的id。它会产生:
id | product_id | biggest_id
1 NULL 3
2 1 3
3 1 3
4 NULL 4
4 4 4
如果您的表具有更深层次结构,则可以使用递归CTE解决问题,或者在更新表时进行计算。