我想知道有很多桌子的缺点是什么(让我们说~100,000)而不是一张大桌子。一个例子是每个用户有一个表,或者user_id是索引的所有用户都有一个大表。
E.g。其中一个名为stuff
:
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| user_id | int(11) | YES | | NULL | |
| x | int(11) | YES | | NULL | |
| y | int(11) | YES | | NULL | |
| . | . | . | . | . | . |
| . | . | . | . | . | . |
| . | . | . | . | . | . |
VS。其中许多都名为[user_id]_stuff
。这样我知道给定user_id会去哪个表。
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| x | int(11) | YES | | NULL | |
| y | int(11) | YES | | NULL | |
| . | . | . | . | . | . |
| . | . | . | . | . | . |
| . | . | . | . | . | . |
我的直觉告诉我,拥有多个表会运行得更快,但拥有一个表将更易于维护/健壮。
此外,是否存在安全问题,因为正在连接用户的ID以生成表名?虽然我想很容易检查提供的id是否是一个数字。
答案 0 :(得分:2)
我的直觉告诉我,拥有多张桌子会跑得更快,但拥有一张桌子会更加可维护/健壮。
许多结构相同的表格与Principle of Orthogonal Design相反。
不要这样做。至少没有非常的理由 - 使用合适的索引,每个表数百万条记录足以让MySQL无需分区就能处理;即使一个 需要对数据进行分区,也有better ways比这个手动kludge(这可能会导致模糊的,可能不一致的数据,并导致数据操作的冗余和复杂性码)。更不用说,在MySQL中,joins are limited to a maximum of 61 tables。
相反,单表方法是您问题的正确解决方案。