gpt4 book ai didi

php - 高效插入复杂数据mysql

转载 作者:行者123 更新时间:2023-11-29 00:47:01 26 4
gpt4 key购买 nike

我尝试将一些复杂的数据插入到 mysql 数据库中,但我遇到了执行性能方面的问题。我的数据如下:

user1
question1_1
answer1_1_1
answer1_1_2
answer1_1_3
...
question1_2
answer1_2_1
answer1_2_2
...
...
user 2
...

为此我在我的数据库中定义了 3 个表

users columns[userid, name,...]
questions columns[questionid, userid, questiontext]
answers columns[answerid, questionid, answertext]

我收到一大堆要插入数据库的数据。因为表是链接的,所以我现在有一个插入用户的实现,检索 ID 并在问题的 VALUES 中使用它......它有效但我收到“超过 30 秒的最大执行时间”,因为单独的数量mysql 插入语句。

我当前的代码如下:

for ($i=0; $i<sizeof($users); $i++)
{
$user = $users[$i];
$sqlstr = "INSERT INTO users (username) VALUES ('".$users[$i]->id."')";

mysql_query($sqlstr);
$userid = mysql_insert_id();

for ($j=0; $j<sizeof($user->question); $j++)
{
$question = $user->question[$j];

$sqlstr = "INSERT INTO question (userid,creator,date) VALUES (".$userid.",'".$question->creator."','".$question->date."')";

mysql_query($sqlstr);
$questionid = mysql_insert_id();

$rows = array();
$sqlstr = "INSERT INTO answers (questionid,name,value) VALUES ";
for ($k=0; $k<sizeof($question->answers); $k++)
{
$rows[] = "('".$questionid."','".$question->answers[$k]->name."','".$question->answers[$k]->value."')";
}
$sqlstr = $sqlstr.implode(',',$rows);
mysql_query($sqlstr);
}
}

假设前一个插入的 ID 用于下一个插入语句,我如何将单独的插入语句组合成一个大语句?我尝试了 LAST_INSERT_ID() 但这没有按预期工作。它似乎引用了该表的最后一个 ID。

或者是否有其他解决方案?

最佳答案

您可以将 sql 语句包装在一个事务中。参见 dev.mysql.com/doc这可能会加快数据库的填充速度,同时仍然允许您继续发出小的单个插入语句。

当你开始一个事务时,所有的磁盘访问都会被挂起,直到你提交。这意味着您的所有插入内容都将一次性写入磁盘。此外,所有内务更新只需编写一次。

例如

mysql_query('START TRANSACTION');
<your code>
mysql_query('COMMIT');

注意:中止事务(使用ROLLBACK)可能会非常慢。

关于php - 高效插入复杂数据mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128380/

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