使用大量数据优化 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 时进行计算来解决问题。
我有一个 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 时进行计算来解决问题。