2012-12-14 62 views
0

将大数组存储到MySQL数据库中的最佳方式是什么?将大数组存储在mySQL中

首先溶液

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

或用foreach

第二溶液

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

第一个解决方案是较好的(清洁器和不那么繁琐的服务器,是吗? ),但是如何创建这个插入命令?

回答

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'])); 
} 
0

存储在一个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,...)] 
+0

是一个文本文件,真是一个好主意?如果是这样,比我会优先存储一个json字符串。顺便说一句:我的数组的最大条目是4000. – user1815934

+0

该查询不适用于json文件。 在文件中写入比在db中写入要快,因此,在文件中写入4000行足够快。 – ke20

+0

不错!我以前没有见过这种用法。我知道这是一个古老的线程,但出于好奇,如果要将数据写入文件,编写一个包含分配给变量的值的PHP文件并不是一件容易的事,只是在需要时才包含它。 – Chris