我看到了一些与此相关的问题,但我觉得它们的情况并不完全相同。这也不是一个与规范化相关的问题。
假设我们有一个产品,它具有一些属性,例如名称、描述、价格、last_update_date、stock_amount
假设,这些“产品”永远不会有 2 个不同的价格或库存等,并且我们不必保留历史数据等。
从性能角度来看,将所有这些数据保存在一个表中会更好吗?或者将其分成单独的表?如:
products -> id, name, last_update_date, stock_amount, price
product_info -> id, products_id, description
我知道数据的划分不太符合逻辑,但这不是现在的重点。
我也许能想到两个论点,
- 如果将数据分成 2 个表,例如要更新描述,则需要找到 products_id 然后更新数据,这可能会花费更多。另一方面,产品表的存储占用空间会小得多。这是否有助于提高查找产品(例如按名称)时的效率?或者因为我们有一个“名称”索引,所以磁盘上的表有多大并不重要?
- 好吧,如果所有内容都在一张表中,我们就不需要在单独的表上工作,这可能会提高效率?
你觉得怎么样?您的观点基于什么?欢迎提供链接和基准测试结果。
谢谢!
最佳答案
如果一切都是一对一的映射,则没有充分的理由不将其全部保存在一个表中。您仍然应该有一个 ID 列,以便如果您有其他一对多或多对多的数据,您可以通过这些表中的 ID 引用产品。
但是,将其拆分为不同的表的好处之一是可以提高并发性。如果所有内容都在一个表中,那么对该表的更新将锁定整行(如果使用 MyISAM,则锁定整个表)。如果将其拆分为多个表,则对其中一个表的更新不会干扰使用其他表的查询。
关于mysql - 为了获得最佳性能,是将单个数据划分到单独的表中还是保留在单个表中更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327152/