PDO获取大量数据

时间:2015-10-26 09:01:18

标签: php performance postgresql pdo cursor

我正在尝试从PDO PostgreSQL数据库中获取大量数据,以通过php中的简化算法(减少行数)来计算它们。

问题是我无法使用fetchAll,经常会收到一条消息:

  

允许的内存大小为134217728字节耗尽...

然后我选择使用游标进行提取,这允许我访问所需的数据,而无需内存关注,如下例所示:

function simplify(&q){
    //Doing some stuff loop
     $current = $q->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, $index+1); //Iterators starts from 1
    //Doing some more stuff

}

[...]

$query = $this->connexion->prepare($req, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)); //More than 100k results

$result = simplify($query);

现在,这就像一个魅力......除了执行时间需要1分钟来计算200k行。

我指定我的算法使用递归行为,这对我的情况没有帮助。

是否有其他解决方案可以减少执行时间而不会占用太多内存?

我想到了数据库服务器端的触发器,但你怎么看?

0 个答案:

没有答案