0
我有MySQL InnoDB表,其中有100万行,我选择100K行导出。表格大约有200列。PHP,MySQL - 载入大约100k条记录并将它们导出到xml
我有什么迄今所做的:
不是*
SELECT列1,列2,... FROM MY_TABLE WHERE删除= 0全选 - 负载100K记录
使用XMLWriter php库冲洗
$writer = new XMLWriter(); $writer->openMemory(); $writer->setIndent(true); $writer->startDocument('1.0', 'UTF-8'); $writer->startElement('export'); $iterator = 0; $data = $this->getData(); foreach($adverts as $advert) { $writer->startElement('ad'); $writer->writeElement('id', $data->id); // .. other columns $writer->endElement(); // end ad if (0 == $iterator % 1000) { file_put_contents($this->getFilePath(), $writer->flush(TRUE), FILE_APPEND); } $iterator++; }
但我仍然有致命错误:允许的内存大小......字节耗尽
是否有任何其他方式如何优化?我想我可以用其他方式从数据库加载数据,比如在第一轮加载id,然后选择IN(10k_ids),但我还没有测试这个想法。
谢谢您的意见。
我有非常类似的问题在How to export HTML table with 100K records with number formatting without memory exhaust
但没有办法如何实现低内存消费。
人仍然使用XML? ;-) – Strawberry
写几个文件,如每个10K? – michi
它必须是一个文件。我的想法是用数据库的foreach加载10k,所以在变量中保存了更小的数据 –