使用大量数据优化 child/parent 结构 table

optimizing child/parent structure in one table with a lot of data

我有一个 table,它有一个简单的父子结构

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         

这个table每天晚上更新一个新版本添加。

每个用户都在使用很多这些产品,但只使用一个版本。如果为 product_id.

添加了新行,则会通知用户

他可以停止使用 id:2 并开始使用 id:3。另一个用户将继续使用 id:2 等等

产品table每晚更新,增长速度相当快。目前大约有 500000 行,每晚增加大约 20000,每年可能有 5-7000000 次更改(新行)。

有没有办法优化这个database/table结构?我应该改变什么吗?一个里面有那么多数据有问题吗table?

你的问题不清楚。示例数据表明父子关系只有一层深。如果是这样,这不是一个特别困难的问题。您可以创建一个查询来查找每个产品的最新产品 ID——我假设这是具有最大 id:

的那个
select id, product_id,
       max(id) over (partition by coalsesce(product_id, id)) as biggest_id
from table t;

这就是查找 table,以获得最大的 id。它会产生:

id | product_id | biggest_id
 1     NULL           3
 2      1             3
 3      1             3
 4     NULL           4
 4      4             4

如果您的 table 具有更深的层次结构,您可以使用递归 CTE 或在更新 table 时进行计算来解决问题。