为了在另一个表中对行进行分组,是否有一个包含单个列的表是常见的情况?
我正在批量插入数据,我希望每个批次都有一个自动增量密钥,以便能够根据生成的ID对数据进行分组。
具体而言,我想从中获取
A
id, x, y, b_id
id PRIMARY KEY
b_id FOREIGN KEY REFERENCES B.id
B
id, timestamp
id PRIMARY KEY
SELECT count(*) as number, B.timestamp FROM A inner join B on A.b_id=B.id
where A.x='value' and A.y='value'
group by B.id;
到
A
id, x, y, timestamp, b_id
id PRIMARY KEY
b_id FOREIGN KEY REFERENCES B.id
B
id
id PRIMARY KEY
SELECT count(*) as number, A.timestamp FROM A
where A.x='value' and A.y='value'
group by A.b_id, A.timestamp;
所以基本上将时间戳移动到B(非规范化)并仅使用外键进行分组。我想避免只加入B中的时间戳。表格相当大(60M行)并且连接速度很慢。如果我仍然在A上过滤并且只有外键用于分组,那么这会加速很多事情。
具体来说,我正在使用MySQL。
答案 0 :(得分:0)
出于性能原因,非规范化是可以接受的。只需确保性能改进超过了非规范化的成本。不仅需要额外的空间需求(可能导致其自身的性能问题),而且还会产生潜在数据错误的成本。例如,当两行最终出现在表格中时#34; A"具有相同的b_id
但不同的时间戳值。