我对我的MYSQL数据库设计的性能有疑问。
表A有很多记录,比如一百万,而表B也有一百万。还有另一个表C,其中A的每个记录ID连接到B中的每一行,并且此连接具有附加值1或0.因此从功能上讲,A中的每个记录都有一个布尔向量,其中B包含'变量'矢量和1或0是值。它在底部的图像中以图形方式进行了解释。
表C将有大量的写入和读取操作(从A的记录中选择所有值),因此该表非常活跃。表C真的很长,一百万行一百万次。
答案 0 :(得分:2)
表设计很好,不应该是一个问题,因为您通过ID来访问记录,这些ID应该被索引。根据您的典型查询,您还应考虑添加复合索引(c(a_id,b_id)
,c(a_id,value)
,c(b_id,value)
,c(a_id,b_id,value)
)。
但是,由于只存在两种状态,0和1,因此您可以决定仅存储其中一种状态。即如果仅存储所有状态1记录,则表中不包含状态0的所有对都是隐式的。特别是当状态分布不均时(例如,90%的记录具有状态0且只有10%具有状态1)或者您通常只访问其中一个状态(例如,您总是寻找1个),这会付出代价。
答案 1 :(得分:1)
具有多个读写的表中的数百万条记录将不是a 如果你遵循mysql的最佳实践,那就是瓶颈。
你的引擎应该是innodb。
您的选择查询不应涉及全表扫描。
你的桌子应该有所需的索引。
您应该查找所有可能的用例,因为无论哪种方式 如果用例支持它,这是一个好主意。
如果您跨多个表拆分数据而不是连接操作 如果需要,可以进行。