从php快速插入MySQL表

从php快速插入MySQL表,php,mysql,Php,Mysql,我必须从php在MySQL表中插入50000到16.000.000行。在数据库中存储至少需要15-20分钟 为了完成我的项目,我必须做得更快。没有人有任何灵活的意见 我正在使用这个代码 for($i=$d;$i<=$fd;$i++) { $j = $i-$d+1; $sql1 = "INSERT INTO information(id, redirection, username, pc, date, time, method,text, http, code, data, requ

我必须从php在MySQL表中插入5000016.000.000行。在数据库中存储至少需要15-20分钟

为了完成我的项目,我必须做得更快。没有人有任何灵活的意见

我正在使用这个代码

for($i=$d;$i<=$fd;$i++)
{   $j = $i-$d+1;
$sql1 = "INSERT INTO information(id, redirection, username, pc, date, time, 
method,text, http, code, data, request, software) VALUES ('".$i."','"
.$_SESSION["redirection"][$j]."','".$_SESSION["username"]$j]."','"
.$_SESSION["pc"][$j]."','".$_SESSION["date"][$j]."','".
$_SESSION["time"][$j]."','".$_SESSION["method"][$j]."','"
.$_SESSION["text"][$j]."','".$_SESSION["http"][$j]."','"
.$_SESSION["code"][$j]."','".$_SESSION["data"][$j]."','"
.$_SESSION["request"][$j]."','".$_SESSION["software"][$j]."')";
mysql_query($sql1);
}

for($i=$d;$i使用扩展插入语法为每条语句插入多行:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

另一个技巧是禁用/删除索引,并在插入所有数据后启用/添加索引

DISABLE KEYS;
INSERT ......
ENABLE KEYS;

我同意卡尔的观点。试试这个:

$sql1 = "INSERT INTO information(id, redirection, username, pc, date, time, 
method,text, http, code, data, request, software) VALUES ";

<?php
for($i=$d;$i<=$fd;$i++)
{   
    $j = $i-$d+1;
    $sql1 .= "('".$i."','"
    .$_SESSION["redirection"][$j]."','".$_SESSION["username"]$j]."','"
    .$_SESSION["pc"][$j]."','".$_SESSION["date"][$j]."','"
    .$_SESSION["time"][$j]."','".$_SESSION["method"][$j]."','"
    .$_SESSION["text"][$j]."','".$_SESSION["http"][$j]."','"
    .$_SESSION["code"][$j]."','".$_SESSION["data"][$j]."','"
    .$_SESSION["request"][$j]."','".$_SESSION["software"][$j]."')";
    if($i<=$fd){
        $sql1 .= ", ";
    }
}
mysql_query($sql1);
?>
$sql1=“插入信息(id、重定向、用户名、pc、日期、时间、,
方法、文本、http、代码、数据、请求、软件)值”;

如果表支持事务(InnoDB),则可以通过在单个事务中执行所有操作来加快批量插入。在所有插入之前查询
开始事务
,在完成之后查询
提交

显然,如果您的表不支持事务(MyISAM),那么这是不相关的


预处理语句是加快批量插入的另一种方法(具有额外的安全优势),但在使用
mysql\u query()的项目中很难做到这一点
到处都是,所以我不想说了。

你不太清楚自己的极限是什么,尤其是为什么。其他答案假设你在某种时间安排上,需要在某个时刻之前完成插入

但是当我们假设您希望尽快恢复对程序的控制,但不一定需要完成插入时,您可以使用延迟插入吗

INSERT语句的延迟选项是对 标准SQL,如果您的客户端无法或 无需等待插入完成。这是一种常见情况 当您使用MySQL进行日志记录并定期运行SELECT时 以及需要很长时间才能完成的更新语句

当客户机使用INSERT DELAYED时,它会从位于的服务器获得批准 一次,当表不在时,该行将排队插入 供任何其他线程使用


FYI-==1000000您是否尝试在插入时删除索引?您的数据库表的结构是什么?批量插入的加载文件其速度相对快于插入语句代码插入时带有疑问,ya phil 1 lakhs表示100000,在执行插入查询时,他如何通过PHP代码动态删除索引?我必须从文本文件中提取并保存到会话后插入到表中udeep:我不确定你在说什么。你是说你不知道如何应用我的建议,还是你认为它对你不起作用?我在会话中存储了相关的数据,我需要在大约1-2分钟内将其更快地存储到mysql数据库中。@Cal你的代码使我N在5分钟内插入我需要更快将此与禁用键相结合以获得更快的速度php的执行时间和内存限制也需要针对如此巨大的查询进行调整您可以给出语法,这将非常有帮助什么语法?如果您谈论的是事务,只需执行
mysql\u查询('BEGIN TRANSACTION'))
在for循环之前,在mysql_查询('COMMIT');
之后。