mysql - 拥有许多 MySQL 表的缺点?

标签 mysql database database-design

我想知道拥有许多表(比方说~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 是否是一个数字很容易。

最佳答案

My gut is telling me that having many tables will run faster, but having one table will be more maintainable/robust.

许多结构相同的表将与Principle of Orthogonal Design相悖。 .

不要这样做。至少不是没有非常充分的理由——使用合适的索引,每个表数百万条记录足以让 MySQL 轻松处理,无需分区;即使确实需要对数据进行分区,也有better ways比这种手动拼凑(这可能会产生不明确的、可能不一致的数据,并导致数据操作代码中的冗余和复杂性)。更不用说,在 MySQL 中,joins are limited to a maximum of 61 tables .

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

关于mysql - 拥有许多 MySQL 表的缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17843823/

相关文章:

java - JPA加入专栏

ios - 如何删除 Parse 中的行

php - 在数据库中存储学分

sql - 设计一个包含可能相互矛盾的列的数据库可以吗

java - 我应该总是从数据库中检索完整的对象吗?

mysql - 我应该使用哪种技术来处理每 30 秒 100 万 * 100 万次计算

PHP、MY SQL错误查询

java - 无法使用 Struts 将文件上传到 MySQL

java - 一起使用 Neo4j Core Java API 和终端控制台

MySQL:从另一个表中具有匹配键的行更新表中的行