有了MySQL,是否有一种方法来存储单个列的键/值数组?例如,我想为一天中的时间存储几个(3-6)不同的值,例如:
12AM: 1.2
1AM: 3.0
6AM: 4.0我已经看到,执行关系表可能是正确的方法,但我将无法控制列的时间框架或值,它们将是用户输入数据。这里的数据还将链接到单个用户。
我可以有一个由UID链接的单独的表,它有多个带键/值的行,但如果有1,000万行的数据,这不是很慢吗?
发布于 2019-01-21 00:45:51
MySQL不支持数组数据类型,尽管它支持MySQL 5.7及更高版本中的JSON数据类型。
严格地说,您可以在TEXT列中存储任何类型的半结构化数据。但是你会发现搜索它并不容易,也不高效。
您可能会发现自己希望在“数组”中搜索特定的值。在这种情况下,您可能会尝试使用LIKE '%pattern%'或正则表达式匹配或类似的东西来找到一天中的某个特定时间。这些表达式很难用索引进行优化,所以搜索通常会变成表扫描。
另一种方法是使用子表,每行有一个日期时间引用您的UID。是的,这可以成为一个包含数百万行的长表,但是使用索引优化搜索要容易得多。对数以百万行的表进行索引搜索,会超过小得多的表上的非索引表扫描搜索。
如果您遵循这样的规则:的每一列都应该是一个标量值,而不是一个“数组”、一个逗号分隔列表、或者一个JSON或XML的“文档”,或者任何类似的半结构化数据,那么您将体验到更少的白发和更愉快的使用SQL的体验。
https://stackoverflow.com/questions/54282222
复制相似问题