【发布时间】:2012-10-13 15:21:49
【问题描述】:
好的,所以我有一个网络系统(基于 codeigniter 并在 mysql 上运行),它允许人们通过在一系列表单中进行选择来查询邮政地址数据的数据库,直到他们到达想要的选择,很标准的东西。然后他们可以购买该信息并通过该系统下载。
查询运行得非常快,但是在将该查询应用到数据库并将其导出到 csv 时,一旦数据集达到大约 30,000 条记录标记(每行大约有 40 列,其中大约 20 列都是每个单元格平均填充 20 个字符的数据)导出到 csv 可能需要 5 分钟左右。
那么,我的问题是,缓慢的主要原因是什么?是不是查询的数据结果集太大了,以至于遇到了内存问题?因此,我应该为该过程留出更多内存吗?或者,有没有更有效的方法从我没有做的 mysql 查询导出到 csv?我应该将查询的内容保存到临时表并简单地将临时表导出到 csv 吗?还是我要解决这一切都错了?另外,由于它存储结果集的方式,我使用 Codeigniters Active Record 来实现这一点是否令人望而却步?
伪代码:
$query = $this->db->select('field1, field2, field3')->where_in('field1',$values_array)->get('tablename');
$data = $this->dbutil->csv_from_result($download_query, $delimiter, $newline); // the some code to save the file
$this->load->helper('download');
force_download($filename, $filedata);
欢迎任何建议!感谢您的阅读!
【问题讨论】:
-
您能否提供一个您的导出过程的程序流程的伪代码示例?
-
当然可以!本质上是: $query = $this->db->select('field1, field2, field3')->where_in('field1',$values_array)->get('tablename'); $data = $this->dbutil->csv_from_result($download_query, $delimiter, $newline); // 保存文件的一些代码 $this->load->helper('download'); force_download($filename, $filedata);我无法让代码正确设置样式!对不起!
-
@John 将代码放在原帖中。
标签: php mysql codeigniter csv