如何将数据(php)传递和处理到数据库(mysql)以获得最佳性能?

如何将数据(php)传递和处理到数据库(mysql)以获得最佳性能?,php,mysql,database,performance,Php,Mysql,Database,Performance,我创建了一个php系统,为每个产品生成150个“序列号”。 现在我想把这些序列号存储在数据库中。我发现有一些方法可以做到这一点: 创建一个表名products\u serialNumber并将每个serialNumber存储到一条记录中,并使用product\u id键将其与产品关联 如果我这样做,我将有很多数据,可能没有人会使用它。但以这种方式获取数据更容易、更快 创建一个表名product\u serialNumbers并存储每个产品的serialNumbers数组,relate再次使用“p

我创建了一个php系统,为每个产品生成150个“序列号”。 现在我想把这些序列号存储在数据库中。我发现有一些方法可以做到这一点:

  • 创建一个表名
    products\u serialNumber
    并将每个serialNumber存储到一条记录中,并使用
    product\u id
    键将其与产品关联
  • 如果我这样做,我将有很多数据,可能没有人会使用它。但以这种方式获取数据更容易、更快

  • 创建一个表名
    product\u serialNumbers
    并存储每个产品的serialNumbers数组,relate再次使用“product\u id”键

  • 如果我喜欢这种方式,我将为每个产品提供序列号记录,但我应该使用更多的
    foreach
    for loop
    函数来提取数据和变量数组,以便在需要时使用,并使用大量内存。我只能使用64m内存。

    如果您使用Mysql之类的ORM数据库,最好的选择是使用解决方案1,因为存储和获取相关数据是使用ORM数据库的最重要原因。
    但是,当您使用NoSql数据库(如MongoDB)或其他文档库数据库时,解决方案2很好。

    如果您使用的是ORM数据库(如Mysql),最好的选择是使用解决方案1,因为存储和获取相关数据是使用ORM数据库的最重要原因。
    但是,当您使用NoSql数据库(如MongoDB或其他文档库数据库)时,解决方案2很好。

    您可以存储JSON…

    规范化是一种用于优化数据库结构的技术。第一个标准格式(1NF)规则规定每一列都应该包含一个值,这一点通过存储多值JSON文档而被打破

    创建一个带有JSON字段的表

    CREATE TABLE `product_serialNumbers` (
      `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(200) NOT NULL,
      `serialNumbers` json DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB;
    
    添加JSON数据

    INSERT INTO `product_serialNumbers` (`title`, `serialNumbers`)
    VALUES (
      'ECMAScript 2015: A SitePoint Anthology',
      '["ac111", "ab177", "ac14521"]'
    );
    
    //all product_serialNumbers with the 'ac14521' serialNumbers:
    SELECT * FROM `product_serialNumbers` 
    WHERE JSON_CONTAINS(serialNumbers, '["ac14521"]');
    
    JSON也可以通过以下命令创建:

    //returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    //returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    //returns ["a", 1, {"key": "value"}]:
    SELECT JSON_MERGE('["a", 1]', '{"key": "value"}');
    
    搜索JSON数据

    INSERT INTO `product_serialNumbers` (`title`, `serialNumbers`)
    VALUES (
      'ECMAScript 2015: A SitePoint Anthology',
      '["ac111", "ab177", "ac14521"]'
    );
    
    //all product_serialNumbers with the 'ac14521' serialNumbers:
    SELECT * FROM `product_serialNumbers` 
    WHERE JSON_CONTAINS(serialNumbers, '["ac14521"]');
    

    您可以存储JSON…

    规范化是一种用于优化数据库结构的技术。第一个标准格式(1NF)规则规定每一列都应该包含一个值,这一点通过存储多值JSON文档而被打破

    创建一个带有JSON字段的表

    CREATE TABLE `product_serialNumbers` (
      `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(200) NOT NULL,
      `serialNumbers` json DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB;
    
    添加JSON数据

    INSERT INTO `product_serialNumbers` (`title`, `serialNumbers`)
    VALUES (
      'ECMAScript 2015: A SitePoint Anthology',
      '["ac111", "ab177", "ac14521"]'
    );
    
    //all product_serialNumbers with the 'ac14521' serialNumbers:
    SELECT * FROM `product_serialNumbers` 
    WHERE JSON_CONTAINS(serialNumbers, '["ac14521"]');
    
    JSON也可以通过以下命令创建:

    //returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    //returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    //returns ["a", 1, {"key": "value"}]:
    SELECT JSON_MERGE('["a", 1]', '{"key": "value"}');
    
    搜索JSON数据

    INSERT INTO `product_serialNumbers` (`title`, `serialNumbers`)
    VALUES (
      'ECMAScript 2015: A SitePoint Anthology',
      '["ac111", "ab177", "ac14521"]'
    );
    
    //all product_serialNumbers with the 'ac14521' serialNumbers:
    SELECT * FROM `product_serialNumbers` 
    WHERE JSON_CONTAINS(serialNumbers, '["ac14521"]');
    

    解决方案1很好,因为在这两种情况下,都会占用数据空间

    如果您选择解决方案2或使用json保存,则每次检索数据时都需要解析json,这将相对较慢,并且会消耗内存。因此,利用SQL连接


    解决方案1在内存消耗方面更快、更便宜。不要担心空间,现在的空间不是挑战,而是效率。如果您认为数据是无用的,为什么要存储它?

    解决方案1很好,因为在这两种情况下,数据空间都会被占用

    如果您选择解决方案2或使用json保存,则每次检索数据时都需要解析json,这将相对较慢,并且会消耗内存。因此,利用SQL连接


    解决方案1在内存消耗方面更快、更便宜。不要担心空间,现在的空间不是挑战,而是效率。如果您认为数据没有用,为什么要存储它?

    如果创建5个产品,我将在我的
    产品
    表中有5条记录,如果使用解决方案1,我将在
    序列号
    中有750条序列号记录!!!(5*150=750)这其中有什么问题?如果创建5个产品,我将在我的
    产品
    表中有5条记录,如果使用解决方案1,我将在
    序列号
    中有750条序列号记录!!!(5*150=750)那么其中的问题是什么?