我想制作两张桌子。一个是用户表,另一个是用户数据表。我想用下面的“id”链接它们
table A (user)
1 | user 1
2 | user 2
table B (userdata)
1 | data 1
1 | data 2
1 | data 3
2 | data 1
2 | data 2
2 | data 3
我想为table B
中的每个用户分区userdata(table A
)。如果我有10个用户(用户表中有10行(table A
)),那么我会为userdata
(table B
)表中的每个用户执行10个分区。
我的问题是,如果我有超过100000个用户,那么是否可以将userdata
(table B
)表分区为100000个分区,以便每个分区在table A
中获得一个用户?< / p>
根据mysql 5.5的限制,我们不能将表分区超过1024.那么有没有替代存储userdata以便我可以轻松搜索每个用户的数据?
答案 0 :(得分:1)
分区的目的不是为每个键创建单独的表,而是为了能够创建更小,更易管理的数据块。想象一下,如果您使用1024个分区,并且每个分区都有1024个客户,那么您已拥有超过100万个客户。你认为mysql会在每个分区中搜索几千条记录以获取单个客户的数据需要多长时间?不会太久。
此外,如果您按每个用户拆分一个表,那么管理这些分区(例如,识别特定用户ID所在的分区)将花费至少与查找特定用户的记录相同的时间。未分区的表。
所以,你只是担心这种情况。
答案 1 :(得分:0)
评论太长了。
你的问题无关紧要。为什么要对单个用户进行分区?我认为没有合理的理由,特别是对于您正在使用的少量数据。
有时,按用户ID的范围进行分区很有用(其中范围可能基于散列函数)。更常见的情况是,分区键与时间的某些方面有关。
在您的情况下,一个简单的索引就足够了。而且,更不用说浪费了。如果您实现了exaple,由于各个分区中未填充的数据页,数据所需的空间可能比需要的大10到10倍。