Mysql创建大量表或更少表,哪个更好?

Mysql创建大量表或更少表,哪个更好?,mysql,sql,database,Mysql,Sql,Database,我目前正在开发一个webapp,它严重依赖于数据库中的大量数据。考虑下面的情况。 A)仅使用预定义表格进行表格设计 1)table vehicle_type ------------------ id|name ------------------ 1 |car 2 |truck 3 |bike ------------------- 2)table users ------------------- id|name ------------------- 1 |James 2 |John 3

我目前正在开发一个webapp,它严重依赖于数据库中的大量数据。考虑下面的情况。

A)仅使用预定义表格进行表格设计

1)table vehicle_type
------------------
id|name
------------------
1 |car
2 |truck
3 |bike
-------------------
2)table users
-------------------
id|name
-------------------
1 |James
2 |John
3 |Stefen
-------------------
3)table ownership
--------------------------------
id|vehicle_type_id|user_id|count
--------------------------------
1 | 1             |1      |30
2 | 1             |3      |20
3 | 3             |2      |13
--------------------------------
B)表格设计,使用应用程序逻辑动态创建表格,即当车辆类型中出现新条目时,我们将使用该名称创建一个新表格

1)table vehicle_type
------------------
id|name
------------------
1 |car
2 |truck
3 |bike
-------------------
2)table users
-------------------
id|name
-------------------
1 |James
2 |John
-------------------
3)dynamic_table car
-------------------
id|user_id|count
-------------------
1 |1      |20
2 |2      |10
-------------------
3)dynamic_table truck
-------------------
id|user_id|count
-------------------
1 |3      |15
2 |2      |20
3 |1      |12
-------------------
4)dynamic_table bike
-------------------
id|user_id|count
-------------------
1 |1      |4
2 |2      |12
-------------------
在第二种情况下,表vehicle_type充当动态表的键。首先,我使用所有权表来存储每个车主拥有的车辆类型计数数据,其次,我为每个车辆类型创建动态表,并将每个车辆类型计数存储在单独的表中。我认为这种方法将使数据库的扩展相对容易,查询效率更高,而不是使用单个所有权表

我从来没有处理过大量的数据,但这一次肯定会有大量的数据。 请注意,上表用作样本,而不是实际应用程序逻辑的一部分

请说明每种方法的优缺点


谢谢

我不知道什么是动态表。对于“哪一个更好”这个问题,并没有一个单一的正确答案。所以这取决于项目。以下是一些可能的观点

第一种方法(一张表):

优点:

  • 启动代码/时间/工作量更少
  • 易于维护(可能不是这样)
  • 查询可以覆盖整个数据集
  • 随着数据集的增长,您可能会申请处理性能问题
缺点:

  • 数据集增长更快
  • 不太灵活(例如,特定车型有一些额外的所有权属性)
第二种方法:多个表

优点:

  • 可能更灵活
  • 规模可能会更好一些
缺点:

  • 更多代码/时间/精力开始
  • 难以维护(可能是错误的)

作为一般建议:考虑数据访问模式。这应该有助于你理解

  • 您将使用什么查询
  • 他们中哪一个会更经常被处决
  • 会有更多的读或写操作吗
  • 您将分发哪些数据

什么是“动态”表?我知道,对于任何类型的持久数据,动态表都不是一个好主意。它们可用于不关心长期生存能力的瞬态数据。在您的情况下,我将定义“大数据集”。Mysql通过适当的索引可以很好地处理这类数据上的数百万行。@ypercube我只是在需要时引用使用应用程序逻辑创建的表。@davidfleman谢谢你的建议,但你能告诉我为什么这不是一个好的做法吗?我使用了一个pincode数据库,该数据库在一个数据库中包含了整个世界的地理位置数据的pincode,执行select查询花费了很多时间,当我尝试按国家划分表时,它比以前的单表方法更快。就像我说的,我在数据库优化方面没有太多经验:)@RohithRaveendran你在地理位置项目中使用了索引吗?