Подскажите, как немного разгрузить sql базу ))) Ситуация такая в БД добавляются строки... Например в таблицу name из файла name.txt... Там около миллиона записей )) Как из корректно загрузить? Через минуту у меня система перестает слушаться )) Висит под 101% )))
поищи на phpinside.ru там очень много о разгрузке (оптимизации) БД. если не срочняком, в свободное время могу посмотреть в закладках (браузера). у меня даже отдельная папка об SQL оптимизации, мониторинг
не, не горит )) Просто загонять в базу поллимона строк данных )) по поводу аптимизации )) Там три поля всего - ID(int15), Name(varchar32), Name2(varchar32) Заполняется только второе (первое автоматом)
PHP: <?php session_start(); if(!isset($_SESSION['from'])) $_SESSION['from'] = 0; $n = count($array) for($i=$_SESSION['from']; $i<$n; $i++) { mysql_query('INSERT INTO ...'); if($i - $_SESSION['from'])>50 exit(header('Location: ' . $SERVER['PHP_SELF'])); }
ну блин.. PHP: <? $arr=array("lalala","lololo",'asdasd','asdasd','asdasdasdasd','423423423','34234234','3242342342','234234234','234234324'); if(!file_exists("db.php")){ file_put_contents("db.php","<?\$data=".var_export($arr,1).";?".">"); header("Refresh:2"); die("Start..."); } include "db.php"; $s=!$_GET['s']?0:$_GET['s']; if(!empty($data[$s])) { header("Refresh:3;url={$_SERVER['PHP_SELF']}?s=".($s+3)); for($i=$s,$c=$data[($s+3)]?($s+3):count($data);$i<$c;$i++) { print "#".($i+1)."__".$data[$i]."<br>"; } }else{ print "Install is over"; } ?>
Такая же проблема. Файл 130 мб. Хочу загрузить на севрвер, но не через пхп. Есть ли программы нормальные? И еще там символ " встречается, из-за него некоторые проблемы при добавлении строкой mysql -uUSERNAME -p newdbname < /path/to/dump.sql
Я не понимаю, в чем проблема поставить время жизни скрипта на 30 минут, и со слипом добавлять в цикле записи?
PHP: <?$file = file('Name.txt'); $count = count($file)-1; for ($i = $count;$i>=0;$i--) { $sql = mysql_query('insert into....'); }
Весь файл грузится в память, отсюда и могут быть проблемы. Читай по строкам, типа такого: PHP: <?php $handle = fopen("/tmp/inputfile.txt", "r"); $bufer = ''; while (!feof($handle)) { $buffer .= fgets($handle, 4096); $strings = explode("\r\n", $buffer); $values = ""; for ($i = 0; $count = (sizeof($buffer) - 1); $i < $count; $i++) { // -1 на случай, если последняя строка считается неполностью, т.е. не влезет в интервал 4096 байт $values .='('.mysql_real_escape_string($strings[$i]).')'; } $query = 'INSERT INTO Table VALUES '.$values; mysql_query($query); $buffer = $strings[++$i]; //чтобы последняя строка соединилась с новой прочтенной sleep(1); } fclose($handle); ?> Хотя можно и без sleep. Не забудь время выставить побольше.
Nemo Чтобы потихоньку читать файл, не целиком все 10 мбайт (или больше). Не забывай, что файлы пишутся сплошняком, просто разделителями служат \r\n, которые блокноты и прячут, разбивая строки.
Nemo Не хочу) Зачем создавать две темы одной проблемы, тем более что мой ответ будет содержать лишь одну строку.
вот ссылки списком http://habrahabr.ru/blogs/mysql/31072/ http://www.php.su/articles/?cat=phpdb&page=034 http://www.php.su/articles/?cat=phpdb&page=005 http://www.phpinside.ru/?q=node/805 http://www.mysqlperformanceblog.com/200 ... omparison/ http://www.mysqlperformanceblog.com/200 ... nce-audit/ Вот тот самый номер ПХПинсайд. Почти полностью посвящен SQL оптимизации. http://phpinside.ru/?q=node/586