代码之家  ›  专栏  ›  技术社区  ›  Shiro

MySQL将多个数据插入单个列或多行中

  •  0
  • Shiro  · 技术社区  · 15 年前

    只是想征求一下关于MySQL的意见。 哪一个是更好的解决方案?

    案例1: 一排存放:

    产品标识:1

    属性_id:1,2,3

    当我检索数据时,我用“,”分隔字符串。

    我看到一些数据库,存储数据的方式是这样的,记录是一个产品,列是存储产品的属性:

    A:3:S:4:“规格”;A:2:I:1;S:6:“黑色”;I:3;S:2:“37”;S:21:“规格私人价值_id”;A:2:I:1;S:11:“12367591683”;I:3;S:11:“12367591764”;S:13:“规格价值_id”;A:2:I:1;S:1:“5”;I:3;S:2:“29”;

    案例2: 三排存放:

    产品标识:1

    属性ID:1


    产品编号:1

    属性ID:2


    产品标识:1

    属性ID:3


    这是我通常做的,为一个记录的属性存储3行。

    在性能和空间方面,任何人都可以告诉我哪一个更好。我看到的是 CASE 1 节省空间,但需要在PHP(或其他服务器端脚本)中处理数据。 CASE 2 更直接,但要使用空格。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Andomar    15 年前

    节省空间?真的吗?当一个1兆字节的磁盘花费70美元时,你是在说节省字节?

    也许你甚至没有保存字节。如果您将属性存储为“1223423342243234”,这就相当于3个属性的30个字节。如果您将它们存储为smallint,它们将占用6个字节。

        2
  •  0
  •   Oliver Maksimovic    15 年前

    例如,取决于属性对于以后的搜索是否重要。

    如果只在一个字段中保留属性作为序列化数组,以防您实际上不关心它们,并且例如,您不需要运行查询来显示具有一个属性的所有产品,那么这可能很好。

    但是,如果属性以逗号分隔(需要使用like),并且将属性存储为序列化数组,则查找具有一个属性的所有产品至少是“糟糕的”;如果将属性存储为序列化数组,则它们完全不可用于使用SQL查询的任何排序或分组。

    如果产品和属性对于选择/分组/排序其他数据有任何重要性,那么对产品和属性之间的多个关系使用单独的表要好得多。

        3
  •  0
  •   True Soft    15 年前

    案例1 ,尽管您节省了空间,但在拆分字符串上还是花费了一些时间。

    您还必须注意字段的大小:如果您有50个具有2个属性的产品和一个具有100个属性的产品,则必须将字段设置为~varchar(200)…你根本不会节省空间。

    我想 案例2 是最好和推荐的解决方案。

        4
  •  0
  •   AJ.    15 年前

    您需要考虑将使用这些值的select语句。如果您希望搜索具有某些属性的记录,那么将它们存储在单独的列中并对它们进行索引会更有效。否则,您将执行“like”语句,这需要更长的时间来处理。