Как PHP PDO работает внутренне?

Я хочу использовать pdo в своем приложении, но перед этим я хочу понять как внутренне PDOStatement->fetch и PDOStatement->fetchAll.

Для моего приложения я хочу сделать что-то как "ВЫБОР * ОТ myTable" и вставить в файл CSV, и это имеет приблизительно 90 000 строк данных.

Мой вопрос, если я использую PDOStatement->fetch поскольку я использую его здесь:

// First, prepare the statement, using placeholders
$query = "SELECT * FROM tableName";
$stmt = $this->connection->prepare($query);

// Execute the statement
$stmt->execute();
var_dump($stmt->fetch(PDO::FETCH_ASSOC));

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
{
echo "Hi";
// Export every row to a file
fputcsv($data, $row);
}

Будет после каждой выборки из базы данных результатом для той выборки было бы хранилище в памяти?

Значение, когда я делаю вторую выборку, память, имело бы данные первой выборки, а также данные для второй выборки.

И поэтому если у меня есть 90 000 строк данных и если делаю выборку каждый раз, чем память обновляется для взятия нового результата выборки, не удаляя результаты предыдущей выборки и таким образом, для последней выборки память уже имела бы 89 999 строк данных.

  1. Это как PDOStatement::fetch работы?
  2. Производительность, мудрая, как это складывает против PDOStatement::fetchAll ?

Обновление: Что-то о выборке и fetchAll из памяти точка зрения использования

Просто требуемый к добавленному некоторая вещь к этому вопросу, как недавно найдено что-то относительно выборки и fetchAll, надейтесь, что это сделало бы этот вопрос стоящим для людей, посетит этот вопрос в будущем для получения некоторого понимания выборки и fetchAll параметров.

выборка не хранит информацию в памяти, и она работает над строкой для расположения в ряд основания, таким образом, она прошла бы набор результатов, и строка возврата 1, чем снова перейдет к набору результатов и, чем снова строка возврата 2 ума сюда, что она не возвратит строку 1, а также 2, но только возвратила бы строку 2, таким образом, выборка ничего не сохранит в память кроме fetchAll, сохранит детали в памяти. Таким образом, выборка является более оптимальным вариантом по сравнению с fetchAll, если мы имеем дело с результирующим набором приблизительно 100K в размере.

11
задан Rachel 29 March 2010 в 16:25
поделиться

1 ответ

Обычно PHP сохраняет свои результаты на сервере. Все зависит от водителя. MySQL можно использовать в «небуферизованном» режиме, но использовать его немного сложно. fetchAll () для большого набора результатов может вызвать переполнение сети, исчерпание памяти и т. Д.

В каждом случае, когда мне нужно обработать более 1000 строк, я не использую PHP.Подумайте также, есть ли в вашем ядре базы данных уже операция экспорта в CSV. Многие так и делают.

3
ответ дан 3 December 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: