Php CodeIgniter-如何在没有内存泄漏的情况下选择一个大表中的所有行

Php CodeIgniter-如何在没有内存泄漏的情况下选择一个大表中的所有行,php,codeigniter,activerecord,Php,Codeigniter,Activerecord,在标题中很难理解我的需求 CodeIgniter在一个包含800000多行的表中一次性执行SELECT查询 这需要很多内存,但在一个特定的服务器上,我遇到了一个“内存不足”的致命错误 为了提高性能,我想将select分为两个select,更具体地说,第一行的50%,然后是左行的50% 我重复使用这组数据来执行后续插入 如何做到这一点而不丢失/忘记任何一行?除了这样的操作与性能问题高度相关之外,您还可以使用无缓冲行 基本上,如果你有一份处理如此大数据的工作,你应该使用 无缓冲行提供并集成在内置 在

在标题中很难理解我的需求

CodeIgniter在一个包含800000多行的表中一次性执行SELECT查询

这需要很多内存,但在一个特定的服务器上,我遇到了一个“内存不足”的致命错误

为了提高性能,我想将select分为两个select,更具体地说,第一行的50%,然后是左行的50%

我重复使用这组数据来执行后续插入


如何做到这一点而不丢失/忘记任何一行?

除了这样的操作与性能问题高度相关之外,您还可以使用
无缓冲行

基本上,如果你有一份处理如此大数据的工作,你应该使用
无缓冲行
提供并集成在内置 在查询生成器中

它在结果行部分有很好的文档记录

例如:

$query = $this->db->select('*')->from('your_table')->get();

while($row = $query->unbuffered_row())
{
    //do your job
}

这将避免内存问题。

为什么不使用限制和偏移网络?为什么一次查询需要800k行?这听起来像是一个。@KumarPraveen我正在寻找一种codeigniter查询风格,它两次选择所有行,但LIMIT似乎必须指定所需的确切数字,我不知道该数字您必须先执行COUNT()查询才能知道行数,然后再将其分割。但同样,你为什么想要两个选择呢?这似乎有些武断。正如格鲁皮提到的,这是一个很大的争吵。即使是其中的一半(400000)仍有大量行需要选择到应用程序中。为什么一次需要这么多行?你想干什么?例如,我无法想象您需要或想要向用户显示所有数据的任何场景。因为我是一个语义学纳粹分子,我想指出,您的问题不是内存泄漏(这意味着不再需要内存后无法正确释放内存),而是一个简单的内存耗尽问题。您正在向内存中加载的数据超出了内存的处理能力(是的,我知道内存泄漏最终可能会导致内存耗尽,但这些术语不能互换)