mysql 所有列存在一个值_mysql-在一个列中多次存储多个值?

使用MySQL是否有一种方法可以为单列存储键/值的数组?例如,我想为一天中的某些时间存储一些(3-6)个不同的值,例如:

12AM: 1.2

1AM: 3.0

6AM: 4.0

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

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

解决方法:

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

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

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

替代方法是使用子表,每行一个日期时间引用您的UID.是的,它可以成长为具有数百万行的长表,但是使用索引优化搜索要容易得多.在具有数百万行的表上进行索引搜索将击败在较小表上进行的非索引表扫描搜索.

如果您遵守每列都应该是一个标量值的规则(而不是JSON或XML的“数组”或comma-separated list或“文档”),那么您会遇到较少的白发,并且对SQL的使用会更加愉快.或类似的任何其他半结构化数据.

标签:relational-database,sql,mysql,database

来源: https://codeday.me/bug/20191211/2106789.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值