Poltoraki
Новичок
Оптимизация парсинга очень большой выборки из БД
Если я правильно понимаю, то после того как я вытскиваю данные из БД с помощью mysql_query, их можно представить в следующем виде матрицы. Ее максимальный размер у меня может быть 63 столбца Х 330000 строк. Ну что-то типа такого:
1 -> a(0), b(1), c(2) и до ...(63)
2 -> a(0), b(1), c(2) .....
........
330000-> a(0), b(1), c(2)....
На основе этой выборки надо сформировать текстовый файл очень специального формата. В структуре этого файла снужно сначала вывести некую служебную информацию, потом все значения a, потом b, ну и т.д. Больше всего времени занимает следующий кусок кода по парсингу результата выборки для вывода значений:
В этом куске в свою очередь очень много времени занимает возврат курсора в начало, я просто комментил эту строку и сравнивал, а как без этого обойтись - не знаю. Может быть и сам цикл вывода далеко не оптимален и кривоват. Гляньте пожалуйста свежим взглядом.
Спасибо!
Если я правильно понимаю, то после того как я вытскиваю данные из БД с помощью mysql_query, их можно представить в следующем виде матрицы. Ее максимальный размер у меня может быть 63 столбца Х 330000 строк. Ну что-то типа такого:
1 -> a(0), b(1), c(2) и до ...(63)
2 -> a(0), b(1), c(2) .....
........
330000-> a(0), b(1), c(2)....
На основе этой выборки надо сформировать текстовый файл очень специального формата. В структуре этого файла снужно сначала вывести некую служебную информацию, потом все значения a, потом b, ну и т.д. Больше всего времени занимает следующий кусок кода по парсингу результата выборки для вывода значений:
PHP:
for ($i = 0; $i < $count_arrOPColumns; $i++)// кол-во столбцов
{
fwrite($fp, "{$_SESSION['arrOPColumns'][$i]} = ");//имя столбца
mysql_data_seek($result, 0);// чтобы вернуть курсор в начало когда выберy все значения из этого столбца
$j = 0;
while ($row = mysql_fetch_row($result))
{
fwrite ($fp, $row[$i]);
$j = $j + 1; //счетчик, чтобы поймать конец строки
if ($j == $_SESSION['$totalrows'])//$_SESSION['$totalrows'] - кол-во строк
{
fwrite ($fp, ";\n\t");
}
else
{
fwrite ($fp, ", ");
}
}
}
Спасибо!

