MYSQL配置用于多个和批量记录插入查询

时间:2014-06-11 12:46:45

标签: php mysql sql

我正在插入超过100万条记录,我的每个插入查询一次插入15000条记录,每次插入100万条记录需要1分钟

像这样: -

insert into records (data) values ('a'),('b'),('c'),('d')........................

但是当我一次执行2个查询时,mysql变慢并且需要25-30分钟。

我应该用什么mysql配置来解决这个问题

2 个答案:

答案 0 :(得分:0)

您是说要插入15000条记录:

insert into records (data) values ('a'),('b'),('c'),('d')
insert into records (data) values ('a'),('b'),('c'),('d')
insert into records (data) values ('a'),('b'),('c'),('d')
insert into records (data) values ('a'),('b'),('c'),('d')
insert into records (data) values ('a'),('b'),('c'),('d')
insert into records (data) values ('a'),('b'),('c'),('d')
insert into records (data) values ('a'),('b'),('c'),('d')
insert into records (data) values ('a'),('b'),('c'),('d')

.....

如果是这样,请尝试使用INSERT ALL

INSERT ALL INTO records (data) values
('a'),('b'),('c'),('d')
('a'),('b'),('c'),('d')
('a'),('b'),('c'),('d')
('a'),('b'),('c'),('d')
('a'),('b'),('c'),('d')
('a'),('b'),('c'),('d')
('a'),('b'),('c'),('d')
('a'),('b'),('c'),('d')
('a'),('b'),('c'),('d')

...........

可能需要一些工作,但是如果将所有插入到同一个表中的插入分组以便可以使用INSERT ALL,则可以减少服务器需要解析的语句数量,这非常昂贵。

答案 1 :(得分:0)

您应该使用交易。这将改善但不一定能解决您的问题。

在PHP中:

$pdo = new PDO($dsn, $username, $password);
$pdo->beginTransaction();

foreach ($somethings as $something) {
    $stmt = $pdo->prepare("INSERT INTO records VALUES (?)");
    $stmt->execute([$something]); // PHP 5.5 will like this
    $stmt->execute(Array($something)); // PHP 5.4 or under.   
}

$pdo->commit();

但实际上对于如此大的数据条目,您应该考虑生成一次发送15000个值的查询...