[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запись большого количества строк БД
Ser18
Подскажите пожалуйста

Надо в БД добавлять большое количество строк, примерно 30000 - 50000

Как это лучше сделать?

Что типа такого

$count_val = count($val);
for($i=0; $i<$count_val; $i++){
mysql_query("INSERT INTO `table` (`val`) VALUES ('".$val[$i]."')");
}

Или в цикле формировать строку, наподобие такой
 $sql = "INSERT INTO `table` (`val`) VALUES ('".$val[0]."');
INSERT INTO `table` (`val`) VALUES ('"
.$val[1]."');
INSERT INTO `table` (`val`) VALUES ('"
.$val[2]."');
.................
INSERT INTO `table` (`val`) VALUES ('"
.$val[n]."');";

И отправлять одним запросом

Я думаю что второй вариант

Но для ускорения я слышал нужно отключать AUTO_INCREMENT (быстрей всего я неправильно выразился)

Он же при добавление новой записи просматривает все индексы и на их основе ставит новый индекс
Как сделать чтоб он один раз проверил а дальше вставлял строки не пересчитывая индексы



Спустя 14 минут, 36 секунд (28.03.2012 - 09:43) nugle написал(а):
вот как выполняю я у себя
структура таблицы такая
id|id_product|name|level
id - auto_increment стоит
т.е. формируется строка запроса, а потом делается сам запрос
$query = 'insert into '.SPH_DBPREFIX.'productimg values';
foreach($src as $key=>$val)
if($key != 0)
$query .= '(NULL, "'.$max.'", "'.$val.'", "second"),';
else
$query .= '(NULL, "'.$max.'", "'.$val.'", "main"),';
$query = trim($query, ',');

mysqlQuery($query);

Спустя 4 минуты, 29 секунд (28.03.2012 - 09:47) Ser18 написал(а):
Спасибо

Спустя 17 минут, 45 секунд (28.03.2012 - 10:05) Placido написал(а):
Для записи большого количества данных есть специальная команда
LOAD DATA
INFILE 'путь к файлу'
INTO TABLE `имя таблицы`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'

Спустя 4 минуты, 57 секунд (28.03.2012 - 10:10) nugle написал(а):
Placido
в твоем понимании большого количества данных это от скольки строк?
для каких случаев?для разового или постоянного?

Спустя 28 минут, 47 секунд (28.03.2012 - 10:39) Placido написал(а):
nugle, для разового. Или вопрос риторический?
З.Ы. Для данного случая можно обойтись и обычной вставкой, но знать о таком способе на случай, если нужно вставить "большое количество строк", не помешает.

Спустя 1 минута, 50 секунд (28.03.2012 - 10:41) nugle написал(а):
Placido
вопрос не риторический был, просто интересно. К моей ситуации не подойдет)у меня постоянно происходит данная ситуация, динамически)
Но буду знать теперь)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.