在MYSQL中跨列存储数据与在JSON列中存储数据

2ic8powd  于 2023-08-02  发布在  Mysql
关注(0)|答案(2)|浏览(141)

假设我有一个表T1。最初它有ID,Identifier,C1,C2作为列。随着时间的推移,我将添加新的列C3,C4等。是否将列设置为ID,Identifier,Info,其中Info是一个JSON列,其中C1,C2,C3作为键及其对应的值。考虑到大约10^9条记录的规模,读取、写入和更新性能如何?

fcipmucu

fcipmucu1#

如果你打算使用关系数据库,那么你应该使用关系模型。虽然许多RDBMS现在可以处理JSON,但这并不意味着您应该将数据保存为JSON(默认情况下)。
使用JSON的一个很好的例子是,如果您的源数据是以JSON形式提供的。您可以按原样将其加载到RDBMS中,然后使用SQL将其从staging表JSON中“解包”为适当的关系格式。
关于性能,涉及的变量太多,不可能提供有用的答案。获得有用答案的唯一方法是在您的环境中使用数据和与您相关的查询对其进行测试

bzzcjhmw

bzzcjhmw2#

  • 如果需要在WHEREORDER BY子句中包含“columns”,请将它们设置为实际列。
  • 如果你有一堆杂七杂八的东西,特别是如果这些值通常是可选的,那么就使用JSON。
  • 添加更多列时添加第二个表(垂直分区);然后LEFT JOINing得到C3(等等)--这个“解决方案”有优点也有缺点。
  • Entity-Attribute-Value模式是众所周知的问题。
  • MySQL 8.0可以“立即”执行ALTER TABLE .. ADD COLUMN ..。但也有警告。

如果你尝试在JSON字段上对10亿行执行Where/Order,你的计算机将融化成一个渣堆。
如果你想要更多关于C1/C2/C3的建议,请解释你的应用程序是什么,多久添加一次列,单元格为NULL的可能性有多大(缺失,省略等)。我们可以讨论其他选择。

相关问题