Должен ли я ограничить скорость или уменьшить количество запросов к базе данных? - PullRequest
7 голосов
/ 24 июля 2011

Я создаю скрипт PHP, который импортирует некоторые данные из текстовых файлов в базу данных MySQL. Эти текстовые файлы довольно большие, в среднем файл будет содержать 10 000 строк, каждая из которых соответствует новому элементу, который я хочу добавить в свою базу данных. (Я не буду импортировать файлы очень часто)

Я беспокоюсь, что чтение строки из файла, а затем выполнение запроса INSERT, 10000 раз подряд могут вызвать некоторые проблемы. Есть ли лучший способ для меня это сделать? Должен ли я выполнить один запрос INSERT со всеми 10000 значений? Или это будет так же плохо?

Может быть, я смогу достать медиум и выполнить что-то вроде 10 или 100 записей одновременно. На самом деле моя проблема в том, что я не знаю, что такое хорошая практика. Может быть, 10 000 запросов подряд - это нормально, и я просто беспокоюсь ни о чем.

Есть предложения?

Ответы [ 3 ]

6 голосов
/ 24 июля 2011

да, это

<?php
$lines = file('file.txt');
$count = count($lines);
$i = 0;
$query = "INSERT INTO table VALUES ";
foreach($lines as $line){
    $i++;
    if ($count == $i) {
        $query .= "('".$line."')";
    }
    else{
        $query .= "('".$line."'),";
    }
}
echo $query;

http://sandbox.phpcode.eu/g/5ade4.php

это сделает один запрос, что в несколько раз быстрее, чем стиль «одна строка - один запрос»!

5 голосов
/ 24 июля 2011

Используйте подготовленные высказывания, предложенные авторами High Performance MySQL .Это экономит много времени (избавляет от расточительного протокола и кода SQL ASCII).

2 голосов
/ 24 июля 2011

Я бы сделал это в одном большом запросе со всеми значениями одновременно. Просто чтобы быть уверенным, однако, убедитесь, что вы выполняете START TRANSACTION; до и COMMIT; после, чтобы, если что-то пойдет не так во время выполнения запроса (что возможно, так как он, скорее всего, будет работать довольно долго) база данных не будет затронута.

...