【问题标题】:Most efficient way of calling mysqli_fetch_assoc调用 mysqli_fetch_assoc 的最有效方式
【发布时间】:2013-11-19 16:07:23
【问题描述】:

最近,我一直在将我所有的“mysql 特定”函数转移到一个类中,这样如果将来我决定切换 DB 语言,我就不必更正我所有的脚本,而只需一个类.

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

例如,现在在我的 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 特定功能推回到一个类中,效率和速度会受到怎样的影响?

【问题讨论】:

  • @AmalMurali 我已经是了。

标签: php mysql mysqli performance


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你应该有两个函数,而不是一个。

    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()
    • 如果您只需要一行或返回的行过多 - 分别使用 fetch() 一次/在 while 循环中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2012-02-21
      • 2014-03-18
      • 1970-01-01
      相关资源
      最近更新 更多