2

我想知道拥有许多表(比如说~100,000)而不是一张大表有什么缺点。一个例子是每个用户有一个表,或者所有用户都有一个大表,其中 user_id 是一个索引。

例如,其中一个名为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    |       |
|    .     |    .    |   .  |  .  |    .    |   .   |
|    .     |    .    |   .  |  .  |    .    |   .   |
|    .     |    .    |   .  |  .  |    .    |   .   |

与许多其中每个都被命名的[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 是否是一个数字。

4

1 回答 1

2

我的直觉告诉我,拥有许多表会运行得更快,但拥有一张表会更易于维护/更健壮。

许多结构相同的表格将违反正交设计原则

不要这样做。至少不是没有很好的理由——有了合适的索引,每张表上百万条记录就足以让 MySQL 轻松处理,而无需分区;即使确实需要对数据进行分区,也有比这种手动混乱更好的方法(这可能会导致数据模棱两可、可能不一致,并导致数据操作代码中的冗余和复杂性)。更不用说,在 MySQL 中,连接最多只能有 61 个表

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

于 2013-07-24T20:11:18.330 回答