调用mysqli_fetch_assoc的最有效方法

时间:2013-11-19 16:07:23

标签: php mysql mysqli performance

最近,我将所有'mysql特定'函数移动到一个类中,只是如果将来我决定切换数据库语言,我不必更正所有脚本,而只需要一个类。

我的问题是关于大数据的效率和速度。

例如,现在在我的database.class.php中我有:

public function fetchAssociative($data) {
    $assocarr = array();
    while ($row = mysqli_fetch_assoc($data)){
        array_push($assocarr, $row);
    }
    return $assocarr;
}
然后在我的脚本中调用

与我刚使用时的比较

while ($row = mysqli_fetch_assoc($result)) {
   //operate on returned data ONE ROW AT A TIME
}

就在我的剧本中。

正如我之前提到的,在一个类中使用所有mysql特定函数很方便,但速度效率怎么样?在此示例中,我的脚本必须等待所有数据返回之前执行任何操作(使用while($ row = mysqli_fetch_assoc($ result)))操作,其中每行返回一次。

TLDR:如果我将mysql特定的函数推回到类中,效率和速度会受到怎样的影响?

2 个答案:

答案 0 :(得分:1)

  

我的问题是关于大数据的效率和速度。

然后你应该担心SQL查询和索引。 不是PHP类或PHP函数.MySQL和大数据(读取大数据集)98%的性能问题是由低效的SQL查询引起的,例如子查询,IN / EXISTS语句没有索引,索引错误,使用没有索引的连接而不理解MySQL引擎..

答案 1 :(得分:0)

你应该有两个功能,而不是一个。

public function fetch($result, $method = MYSQLI_ASSOC) {
    return mysqli_fetch_array($result, $method);
}

public function fetchAll($result, $method = MYSQLI_ASSOC) {
    $ret = array();
    while (mysqli_fetch_array($result, $method)){
        $ret[] = $row;
    }
    return $ret;
}
  • 如果您一次需要所有数据,请致电fetchAll()
  • 如果您只需要一行或者返回的行太多 - 分别在while循环中使用fetch()一次。