【问题标题】:Store multiple values for multiple times in one column?在一列中多次存储多个值?
【发布时间】:2019-01-21 00:28:44
【问题描述】:

MySQL 有没有办法为单个列存储键/值数组?例如,我想为一天中的时间存储几个 (3 - 6) 个不同的值,例如:

12AM: 1.2
1AM: 3.0
6AM: 4.0

我已经看到创建关系表可能是正确的方法,但我无法控制列的时间范围或值,它们将是用户输入数据。此处的数据也将链接到单个用户。

我可以有一个由 UID 链接的单独表,该表将包含多行包含键/值,但从长远来看,如果有超过 1000 万行数据,这会不会很慢?

【问题讨论】:

  • "但是从长远来看,如果有超过 1000 万行数据,这会不会很慢?"没有。 1000 万行具有不错的索引对于一个还不错的数据库来说是一笔小数目。您可以在 10,000,000 的表中找到任何值,只需 25 次比较(10mil 的 log2 为 23.25)
  • 搜索 1000 万行单条数据比搜索 200 万行(例如)逗号分隔的数据要快得多,在这些数据中您将无法轻松使用索引。

标签: mysql sql database relational-database


【解决方案1】:

MySQL 不支持数组数据类型,尽管它在 MySQL 5.7 及更高版本中支持JSON data type

严格来说,您可以将任何类型的半结构化数据存储在TEXT 列中。但是你会发现搜索它并不容易或高效。

您可能会发现自己希望在“数组”中搜索特定值。在这种情况下,您会很想使用LIKE '%pattern%'regular expression matching 或类似的东西来查找一天中的特定时间。这些表达式很难使用索引进行优化,因此搜索通常会变成表扫描。

另一种方法是使用子表,每行一个日期时间引用您的 UID。是的,这可以增长为具有数百万行的长表,但使用索引优化搜索要容易得多。在具有数百万行的表上进行索引搜索将优于在小得多的表上进行非索引表扫描搜索。

如果您遵守每一列都应该是一个标量值的规则——而不是“数组”或@987654323 @,或 JSON 或 XML 的“文档”,或任何其他类似的半结构化数据。

【讨论】:

  • 是的,在线阅读更多内容,这似乎是正确的解决方案。谢谢你的详细解释。
猜你喜欢
  • 2016-01-17
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2020-03-14
  • 1970-01-01
相关资源
最近更新 更多