0

大きな配列をmySQLDBに格納するための最良の方法は何ですか?

最初の解決策

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

またはforeachを使用

2番目の解決策

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

最初の解決策の方が優れていますが(サーバーにとってよりクリーンで負担が少ないですよね?)、この挿入コマンドを作成するにはどうすればよいですか?

4

2 に答える 2

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']));
}
于 2012-12-14T07:48:57.823 に答える
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,...)]
于 2012-12-14T07:42:40.700 に答える