【问题标题】:MySQL Database design with multiple column or single columnMySQL 多列或单列数据库设计
【发布时间】:2015-02-12 15:01:08
【问题描述】:

您好,只是一个简单的问题
我需要将数据存储到数据库中,现在有 2 个选项可以显示

数据:a、b、c、d
1.将a,b,c,d存储在1列中,需要时只在应用程序中进行查询和拆分
2. 存储a,b,c,d到4个不同的列,可以直接从数据库中查询

哪个选项会更好?我担心将其拆分为 4 个不同的列会使表包含许多列,这会降低性能吗?而且我很好奇查询是否可能很快但将数据传输到我的应用程序很慢?

【问题讨论】:

  • 将内容分成多列是规范化数据的第一步。如果您将所有数据以逗号分隔、竖线分隔或其他分隔值存储在单个列中,您的排序、过滤和选择选项将受到极大限制。 MySQL 可以处理多个列。根据您的数据结构,您可以将数据规范化为多个表,每个表中的列集较少。但是,如果没有看到您的数据结构示例,很难说。
  • 将数据拆分成多列。

标签: mysql database performance multiple-columns


【解决方案1】:

MySQL 性能是一个复杂的主题。对于您提出的问题:

我担心的是把它分成 4 个不同的列会使表格 包含许多列,是否会降低性能?

从性能的角度来看,没有什么比这更糟糕的了,有 4 列、10 列、20 列或 50 列。

现在,话虽如此,有些事情可能会影响性能,如果您不了解它们,可能会影响性能。例如,如果你 SELECT * FROM {my_table} 真的只需要 SELECT a FROM {my_table}... 是的,那会影响你的性能(尽管根据你的缓存策略,有一些支持 SELECT * FROM {my_table} 的论据)。

同样,您需要考虑 LIMIT 语句。对你的问题

我也很好奇查询是否可能很快但 将数据传输到我的应用程序很慢?

是的,当然。如果您只需要 50 行而您的表有 50000 行,那么您将需要在 SQL 语句中添加限制子句,否则您将通过网络发送比您需要的更多的数据。内存比磁盘快,磁盘比网络快。如果您通过网络发送大量不需要的数据,您最好相信这会导致性能问题。但同样,请记住,这与您拥有多少列无关。表的列数绝对不会影响性能(至少在您所谈论的规模和您所考虑的方式上没有)

总而言之,性能是一个复杂的话题。如果你有兴趣,你应该看看它。听起来 a、b、c 和 d 在逻辑上是不同的列,因此您可能应该继续将它们存储在 MySQL 的不同列中。希望这可以帮助。

【讨论】:

  • 好的,我能说从 {table} 中选择 a 总是比从 {table} 中选择 a、b、c、d 快吗? [a,b,c,d] 实际上是列表中的某个值,所以我认为在我的情况下应该全部放入 1 列?
  • 它不像你想象的那样工作。假设(不包括列开销)列 a、b、c 和 d 的每一行占用 10 个字节的空间......所以 a 的每一行是 10 个字节,b 的每一行是 10 个字节,等等。你有MySQL 中列的少量开销......但它是少量的。现在,假设您想要 1000 行 a 列。您可以为 a 列选择 1000 x 10 字节 + 开销。或者您可以选择 1000 x (10 + 10 + 10 + 10) 加上合并列 a-d 的开销。仔细考虑一下...您需要将这些列拆分为 4 个单独的列
猜你喜欢
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 2016-12-10
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 2023-03-17
相关资源
最近更新 更多