gpt4 book ai didi

php - 在 mysql 中插入千条记录的最快方法是什么?

转载 作者:行者123 更新时间:2023-11-29 06:55:15 25 4
gpt4 key购买 nike

我想插入数千条记录,而且我需要它的速度很快。我读了很多关于这个问题的文章,所以我决定放弃我的旧方法(mysql_connect)并使用准备语句和 mysqli。所以为了测试它的速度,我写了以下内容。

function load_data2db($sms_id){
$mysqli = new mysqli('localhost', 'root', 'cr3at1ve', 'tmp-clicknsend');
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}


// Create statement object
$stmt = $mysqli->stmt_init();
if ($stmt = $mysqli->prepare("INSERT INTO isec_test (sms_id, status,msgid,prmsgid,mob,sms_history_id) values (?, ?, ?, ?, ?, ?)")) {


/* Bind our params */
$stmt->bind_param('ssssss',$sms_id,$status,$msgid,$prmsgid,$mob,$sms_history_id);

for($i=0;$i<100000;$i++)
{
/* Set our params */
$sms_id = "110";
$status = "OK";
$msgid = "msgid";
$prmsgid = "100-0";
$mob = "306974386068";
$sms_history_id = 102;

/* Execute the prepared Statement */
$stmt->execute();
}


/* Close the statement */
$stmt->close();
}
else {
/* Error */
printf("Prepared Statement Error: %s\n", $mysqli->error);
}
}

load_data2db(10);

然后我用老方法做了同样的事情(循环并一个一个插入)

include("mysql_connect.php");
for($i=0;$i<100000;$i++)
{
$query = "INSERT INTO isec_test(sms_id,status,msgid) values ('1','OK','123-123')";
$query = @mysql_query($query);
}
mysql_close($dbc);

我做了很多测试,简单的 mysql 方式总是快 1 秒。所以我很疑惑。我能做些什么?使用加载数据?

最佳答案

我建议您使用 LOAD DATA LOCAL INFILE除非您需要在插入时对每行进行一些处理。

通常建议在数据库端准备 SQL 语句和绑定(bind)参数会更快,因为它不需要重新解析 SQL 查询数千次。

但 PHP 扩展本身包含一些需要在应用程序端运行的代码。 mysqli 扩展可能更复杂,因此与旧的 mysql 扩展相比,重复操作的开销略多。

在 PHP 中,如果您在循环中重复多次,单个函数调用的开销会很明显。有人告诉我这两种说法之间存在可衡量的差异:

$x = (int) '123';
$x = intval('123');

第二行是一个函数调用,所以速度较慢(虽然幅度很小)。

关于php - 在 mysql 中插入千条记录的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com