拥有许多MySQL表的缺点?

时间:2013-07-24 20:05:10

标签: mysql database database-design

我想知道有很多桌子的缺点是什么(让我们说~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是否是一个数字。

1 个答案:

答案 0 :(得分:2)

  

我的直觉告诉我,拥有多张桌子会跑得更快,但拥有一张桌子会更加可维护/健壮。

许多结构相同的表格与Principle of Orthogonal Design相反。

不要这样做。至少没有非常的理由 - 使用合适的索引,每个表数百万条记录足以让MySQL无需分区就能处理;即使一个 需要对数据进行分区,也有better ways比这个手动kludge(这可能会导致模糊的,可能不一致的数据,并导致数据操作的冗余和复杂性码)。更不用说,在MySQL中,joins are limited to a maximum of 61 tables

相反,单表方法是您问题的正确解决方案