【问题标题】:Store a big array in mySQL在 mySQL 中存储一个大数组
【发布时间】:2012-12-02 05:01:46
【问题描述】:

将大数组存储到 mySQL DB 中的最佳方法是什么?

第一个解决方案

INSERT INTO `friendList` ( `userId` , `friendId` , `friendName` ) VALUES 
    ( '1', '3242343', 'bernd' ), 
    ( '1', '3242342', 'jusu' );

或者用foreach

第二种解决方案

foreach (xxxx) {
     mysql_query("insert xxxx");
}

第一个解决方案更好(更干净而且对服务器来说不是那么繁重,对吧?),但是如何创建这个插入命令呢?

【问题讨论】:

    标签: mysql arrays store


    【解决方案1】:

    最快的方法是使用多重插入语法(如您所描述的),但这不是我向大多数人推荐的方法,除非性能真的很重要。您还需要注意不要超过最大查询大小(可以在服务器之间更改)。

    但是,您可以使用准备好的语句(PDO 示例)执行此操作,并且仍然可以获得合理的性能:

    $db = new PDO($dsn, $user, $password, array(
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    ));
    
    $stmt = $db->prepare('INSERT INTO `friendList` ( `userId` , `friendId` , `friendName` ) VALUES (?, ?, ?)');
    
    foreach ($data as $row) {
        $stmt->execute(array($row['id'], $row['friendid'], $row['friendname']));
    }
    

    【讨论】:

      【解决方案2】:

      将所有数据存储在 csv 文件或文本文件中并使用LOAD DATA INFILE

      LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
      [REPLACE | IGNORE]
      INTO TABLE tbl_name
      [FIELDS
          [TERMINATED BY '\t']
          [[OPTIONALLY] ENCLOSED BY '']
          [ESCAPED BY '\\' ]
      ]
      [LINES 
          [STARTING BY '']    
          [TERMINATED BY '\n']
      ]
      [IGNORE number LINES]
      [(col_name,...)]
      

      【讨论】:

      • 文本文件真的是个好主意吗?如果是这样,我宁愿存储一个 json 字符串。顺便说一句:我的数组的最大条目是 4000。
      • 查询不适用于 json 文件。写入文件比写入数据库快,因此,在文件中写入 4000 行已经足够快了。
      • 不错!我以前没见过这个用过。我知道这是一个旧线程,但出于好奇,如果您要将数据写入文件,只编写一个包含分配给变量的值并在需要时包含它的 PHP 文件不是更容易吗?跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      相关资源
      最近更新 更多