2012-12-14 60 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