2015-04-29 77 views
1

我必须INSERT千条记录。 我在一个循环中使用msqli::multi_query(),并希望'multi_query'块的n查询(其中'n'是一个参数)。 第一INSERT去好了,第二个不顺心,因为我有这样的管理结果:MySqli多个查询如何处理结果更快的方式

while($mysqli->more_results()) 
{ 
    $mysqli->next_result(); 

    if($res = $mysqli->store_result()) // added closing bracket 
    { 
     $res->free(); 
    } 
} 

的问题是,这赤缓慢。

问题是:我该如何优化这个批量INSERT使得结果管理更快?

+0

什么是成千上万的记录,你必须插入的来源是什么?你知道你可以用一个语句执行多个插入吗? –

+0

'INSERT INTO TABLE_NAME(FIELD1,FIELD2,字段N)VALUES(DATA1,DATA2,数据N),(DATA1,DATA2,数据N);' – mcklayin

+0

喜@mclayin 查询是像延迟此 '$ SQL =“INSERT INTO dailystat(timestamp,id,value $ campo1)values($ timestamp,$ id,$ value $ value1)on key key update value = if(value> = - $ value,value + $ value,0);“;' –

回答

0

如果您在一张表中插入,只需在INSERT中使用批量修改。
例子:
INSERT INTO TABLE (field1,field2,field3) VALUES (value1,value2,value3),(value4,value5,value6)

使用forforeach在PHP做查询,然后简单地使用mysqli_query。根据你在评论部分提到的错误来判断,你违反了ket限制,这意味着你试图插入相同的值两次。

如果你在不同的表格中插入,你可以使用multi_query接口。 准备一个查询Insert1;Insert2;
并使用multi_query这样

$con->multi_query($query); 
    while (mysqli_more_results($con)) { 
     mysqli_use_result($con); 
     mysqli_next_result($con); 
    } 
+0

我用multi_query你给我建议, 并建立5000的SQL查询字符串的块为唯一$查询字符串 但性能并不好,所以我想我可以优化 要快 '如果($步> 5000) {\t \t \t \t \t /*执行多查询*/\t \t 如果($ mysqli-> multi_query($查询)===真){ f_log( “成功创建新记录(查询)”,“credito.debug。日志“); (“Error(query):”。$ mysqli-> error,“credito.debug.log”); } while($ mysqli-> more_results()) { \t $ mysqli-> use_result(); \t $ mysqli-> next_result(); } ' –

+0

@AlessioGiuliano的表演取决于许多事实。为表格结构提供有关索引的信息。 – RuslanN

+0

我不能执行下一个多重查询,直到我获取前一个结果。 我执行此代码来做到这一点,但它需要很长时间 我该如何快速做到这一点? 'while($ mysqli-> more_results()&& $ mysqli-> next_result()){ \t $ extraResult = $ mysqli-> use_result(); \t if($ extraResult instanceof mysqli_result){ \t $ extraResult-> free(); \t} }' –