在下面的老问题中,最上面的答案描述了如何加快mysql插入过程。因为这是一个老问题,我很好奇如何用准备好的语句做到这一点。我在innodb中使用mysql。我将在这里为不想查看链接的人粘贴一个来自答案的示例。
这里我将介绍3种插入数据的方法,从慢到快:
如果要插入的行太多,则以下操作非常慢:
INSERT INTO mytable (id,name) VALUES (1,'Wouter');
INSERT INTO mytable (id,name) VALUES (2,'Wouter');
INSERT INTO mytable (id,name) VALUES (3,'Wouter');
这已经快多了:
INSERT INTO mytable (id, name) VALUES
(1, 'Wouter'),
(2, 'Wouter'),
(3, 'Wouter');
这通常是最快的:
有如下csv文件:
1,Wouter
2,Wouter
3,Wouter
然后像这样跑
LOAD DATA FROM INFILE 'c:/temp.csv' INTO TABLE mytable
老问题
这显然是一个古老的答案。我想知道如何用准备好的语句以尽可能快的方式插入,但是让我们一步一步来做。首先我想知道如何用准备好的语句来做这件事。任何能举的例子都将不胜感激。我将回答或编辑这个问题与任何额外的信息,你可能需要。
我用的是为里克·詹姆斯的问题编辑的mysqli。
我要尽我最大的努力,对如何做到这一点做出有根据的猜测。如果我错了,请纠正我。
我想我可以改变
INSERT INTO mytable (id, name) VALUES
(1, 'Wouter'),
(2, 'Wouter'),
(3, 'Wouter');
进入之内
$bindParamsToBuild = '($myArray[key], ?,?),'
for (i = 0; i < count($myArray); i++)
{
if (i === count($myArray))
{
$bindParamsToBuild += '($myArray[key], ?,?);';
}
else
{
$bindParamsToBuild += '($myArray[key], ?,?),';
}
}
"INSERT INTO mytable (id, name) VALUES".$bindParamsToBuild;
1条答案
按热度按时间suzh9iv81#
你用的是pdo还是mysqli?
如果使用mysqli,请使用
real_escape_string()
在列表中的每个项目上分别列出。这有点乏味,但可以通过逐步构建insert字符串来简化。我建议不要把超过100个项目放在一个单一的INSERT
.https://stackoverflow.com/a/780046/1766831 是一个很好的细节讨论(但一定要使用
mysqli_*
,不是mysql_*
.)计划a:按照其中一些链接中的讨论构造查询。使用
real_escape_string
和php字符串操作,而不是“prepare”。计划b:用很多问号建立一个字符串。同时,构建一个包含要放入这些问号的值的数组。然后做一个“准备”来完成多行
INSERT
声明。