我想知道拥有许多表(比方说~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/