首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在循环中迭代时,在循环中访问MySQL的效率是高还是低?

在循环中迭代时,在循环中访问MySQL的效率是高还是低?
EN

Stack Overflow用户
提问于 2012-05-12 11:18:46
回答 3查看 302关注 0票数 1

我正在编写一个PHP脚本来从web上抓取数据。最终,我想要把所有抓取的数据很好地塞进mysql数据库中并进行格式化。

但是,由于PHP脚本中有多个循环和数组需要迭代,我的直觉是,为了速度和效率,最好不要保持对mysql数据库的循环访问(在每次循环时插入数据),而是将数据存储在PHP中的临时数组中,然后仅在脚本结束时将数组一次性转储到mysql中。

你说呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-12 11:42:31

是的,当涉及到查询的数量时,通常是最小的是性能。但是,您的脚本受到网络io(下载速度)的限制,而不是数据库。当操作系统下载数据时,您的脚本大部分时间都处于睡眠状态。正因为如此,您发出的任何查询都将相对较少。

我的建议是让它正常工作。

票数 2
EN

Stack Overflow用户

发布于 2012-05-12 11:24:47

您可以使用Insert into values("1","2","3"),("3","5,"5")

在foreach中,您可以创建一个值数组,在forloop之外,您可以内爆并插入到mysql中。

比方说

代码语言:javascript
复制
$values = array();
foreach($yourData as $eachData){

// prepare your values here.
$values[] = "('1','2',3')";

}


// out of forloop,
$values = implode(",",$values); 

$query = " insert into `tablename` (field1,field2,field2) values {$values} " ;

干杯

票数 5
EN

Stack Overflow用户

发布于 2012-05-12 11:50:04

如前所述,您可以用一个查询插入多个行,这比对每行使用单独的查询要优化得多。您可以使用循环向查询字符串中添加更多行,但最重要的是,记住对数据进行转义!

代码语言:javascript
复制
<?php    
$rows = array();
$sql = '
    INSERT INTO `table` (`key`, `data`)
    VALUES ';

$data = array(
    array(
        'key' => 'key1',
        'value' => 'some value'
    ),
    array(
        'key' => 'key2',
        'value' => 'some value 2'
    ),
    array(
        'key' => 'key3',
        'value' => 'some value 3'
    ),
);

for ($i = 0; $i < count($data); ++$i)
{
    // Do me a favor and look up PDO.
    $key = mysql_escape_string($data[$i]['key']);
    $row = mysql_escape_string($data[$i]['value']);

    if ($i === 0)
        $sql .= ' (\'' . $key . '\', \'' . $row . '\')';
    else
        $sql .= ', (\'' . $key . '\', \'' . $row . '\')';
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10560795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档