У меня есть таблица с около 100000 записей, структура показана нижеОптимизация управления памятью для PHP и MySQL
id | name | desc | length | breadth | -------------|remark //upt o 56 fields
1 FRT-100 -desc- 10 10 remarking
----------------------------------------------------------------
----------------------------------------------------------------
, что РМКО делает это с помощью cronjob (Gearman), чтобы записать все эти данные в CSV мой код приведен ниже
<?php
set_time_limit (0);
ini_set("memory_limit","2048M");
//get the total count of records,so that we can loop it in small chunks
$query = "SELECT COUNT(*) AS cnt FROM tablename WHERE company_id = $companyid";
$result = $link->query($query);
$count = 0;
while ($row = mysqli_fetch_array($result)) {
$count = $row["cnt"];
}
if ($count > 1000) {
$loop = ceil($count/1000);
} else {
$loop = 1;
}
// im going to write it in small chunks of 1000's each time to avoid time out
for ($ii = 1; $ii <= $loop; $ii++) {
if ($ii == 1) {
$s = 1;
} else {
$s = floatval(($ii * 1000) - 1000);
}
$q = "SELECT * FROM datas WHERE group_company_id = $companyid LIMIT 1000 OFFSET $s";
$r = $link->query($q);
while ($row2 = mysqli_fetch_array($r)) {
//my csv writing will be done here and its working fine for records up to 10,000 ~ 12,000 after than memory exhaustion occours
}
}
?>
я сильно подозреваю, что-то может быть оптимизировано в зависимости смещения от MySQL .can кто-то показать мне лучший способ оптимизировать его? открыт для любых предложений (CRON, сторонние библиотеки ..etc)
'while ($ row = mysqli_fetch_array ($ result)) {' --- зачем вам нужен цикл здесь? – zerkms
@zerkms, чтобы узнать, сколько записей ... с его одной строки. Да, вы правы. – coolguy
@zerkms вы можете поместить некоторый свет на лимит, проблема смещения – coolguy