PHP-MySQL快速插入多行

PHP-MySQL快速插入多行,php,mysql,performance,transactions,prepared-statement,Php,Mysql,Performance,Transactions,Prepared Statement,目前,我正在使用准备好的语句插入一组行,下面是代码: 更新代码: $sql = $mysqli->prepare("INSERT INTO `TBLName` (Col1, Col2, Col3) Values(?, ?, ?)"); for ($i = 0; $i < 1000; $i++) { $sql->bind_param('sss', $Col1Data, $Col2Data, $Col3Data); $sql->execute(); }

目前,我正在使用准备好的语句插入一组行,下面是代码:

更新代码:

$sql = $mysqli->prepare("INSERT INTO `TBLName` (Col1, Col2, Col3) Values(?, ?, ?)");
for ($i = 0; $i < 1000; $i++) {
    $sql->bind_param('sss', $Col1Data, $Col2Data, $Col3Data);
    $sql->execute();
    }
$sql->close();
$sql=$mysqli->prepare(“插入到`TBLName`(Col1,Col2,Col3)值(?,,?)”;
对于($i=0;$i<1000;$i++){
$sql->bind_参数('sss',$Col1Data,$Col2Data,$Col3Data);
$sql->execute();
}
$sql->close();

然而,我看到一篇文章谈到交易要快得多。。。我可以将交易与准备好的报表结合使用,还是应该以不同的方式使用?假设每次脚本运行都要插入1000行,并且脚本以5秒的间隔触发,那么对我来说最好的方法是什么?

我建议在单个
insert
语句中插入100到1000行。(我认为如果没有更多的更改,您提供的代码将无法工作。)

并使用
autocommit=1
或在
事务中执行100-1000行。这样做的好处是不会占用系统,也不会收集大量数据以进行潜在的“撤销”。但不以原子方式处理所有行的缺点是

少于100导致额外的开销;超过1000人陷入收益递减和其他形式的管理费用

100-1000还支持复制,而不是占用复制流


如果csv文件中已有数据,请使用
LOAD data

侧注:为什么要在准备好的语句中使用
real\u escape\u string()
?您无需每次运行此操作时都使用额外的函数/db调用。您可能希望看到这一点,这正是我所说的@TVAvanHesteren准备好的语句就足够了,是的,它会节省一些时间。@TVAvanHesteren您肯定会获得性能并避免注入。试一试。@TVAvanHesteren很难说,
$ColXData
是什么,以及您的列是否接受空值。现在的情况是,每3个值调用1000次db;那是3000美元。顺便说一句,不客气。