使用MySQL是否可以为单个列存储键/值数组?例如,我想为一天中的某些时间存储一些(3-6)个不同的值,例如:
Task task = service.Tasks.Get("@default", "taskID").Fetch();
Console.WriteLine(task.Title);
我已经看到做一个关系表可能是这样做的正确方法,但是我无法控制列的时间范围或值,它们将是用户输入的数据。这里的数据还将链接到单个用户。
我可以通过UID链接一个单独的表,该表将具有键/值的多行,但是从长远来看,如果有1000万行以上的数据行,这不会很慢吗?
答案 0 :(得分:2)
MySQL不支持数组数据类型,尽管它在MySQL 5.7和更高版本中支持JSON data type。
严格来说,您可以 将所需的任何类型的半结构化数据存储在TEXT
列中。但是随后您会发现搜索它并不容易或效率很高。
您可能会发现自己希望在“数组”中搜索特定值。在这种情况下,您会倾向于使用LIKE '%pattern%'
或regular expression matching或类似的东西来查找一天中的特定时间。这些表达式很难用索引优化,因此搜索通常变成表扫描。
另一种方法是使用子表,每行一个日期时间引用您的UID。是的,它可以成长为具有数百万行的长表,但是使用索引优化搜索要容易得多。在具有数百万行的表上进行索引搜索将击败在较小表上进行的非索引表扫描搜索。
如果您遵守每列应为一个标量值的规则,而不是“数组”或{{ 3}},或JSON或XML的“文档”,或类似的任何其他半结构化数据。