【发布时间】:2019-04-07 07:41:39
【问题描述】:
在下面提出的旧问题中,最佳答案描述了如何加快 MySQL 插入过程。由于这是一个老问题,我很好奇如何使用准备好的语句来做到这一点。我将 MySQL 与 innoDB 一起使用。对于不想检查链接的人,我将在此处粘贴答案中的示例。
这里我将介绍 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_ *为 Rick James 的问题编辑。
我将尽我所能,对如何做到这一点做出有根据的猜测。如果我错了,请纠正我。
我想我可以转换
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;
【问题讨论】:
-
“尽可能快”仍然是
LOAD DATA FROM方法。 -
可以用php的
microtime()计算 -
你们错过了重点,因为我试图弄清楚如何将其放入准备好的语句中。请给我一个示例,说明这将如何进入准备好的语句中。
标签: php mysql prepared-statement server-side web-development-server