Оптимизация запроса к базе

Markus

Новичок
Оптимизация запроса к базе

Использую такой код
PHP:
$i = false;
$count = false;
$result=mysql_query("SELECT id FROM _albums ORDER BY id DESC LIMIT 1");
while ($row=mysql_fetch_row($result)) {
$count=$row[0];
}
echo $count."<br>";
for ($i=0; $i<=$count; $i++) {

$result=mysql_query("SELECT id,title FROM _albums WHERE id=$i ORDER BY id LIMIT 10000");
while ($row=mysql_fetch_row($result)) {
$id = $row[0];
$real = $row[1];
$replace = replace_in($real);
echo "$id --- $real ---------- $replace -------- Albums<br>";
mysql_query("REPLACE _n2al VALUES ('$id','".addslashes($real)."','$replace')") or die('Error' .mysql_error());
}

}
но при запуске этого скрипта раза три, на хостинге блокируются все запросы потом, превышаю лимит 28800 запросов в час, можно ли как то оптимизировать этот код? или лучше сначала запихуть в массив, но массив в этом случае получится большой >50000 записей
 

alexhemp

Новичок
Используй расширенный синтаксис INSERT/REPLACE

Т.е. REPLACE table(field1, field2) VALUES(val1, val2),(val3,val4),(...),...,(...)

Все записи будут в одном длинном запросе, и формально он будет один

-~{}~ 02.05.05 14:29:

То-же и с первым запросом, все данные можно брать только одним запросом.
 

Markus

Новичок
все понял спасибо!!!!!

-~{}~ 02.05.05 16:41:

alexhemp
То есть fied будет около 50 тысяч то работать будет?
 

chira

Новичок
Markus
что делает функция replace_in( ?
можно ли получить результат её работы функциями MySQL?
 

Markus

Новичок
chira
Дело в том что нет :(
Эта функция переводит имя в понятное для файловой системы, чтобы использовать ЧПУ, а все это копирование это создание алиясов
 

chira

Новичок
Markus
как данные попадают в таблицу _albums?
нельзя ли добавить поле replace в таблицу _albums и делать преобразование при добавлении данных в неё.
тогда необходимость в таблице _n2al отпадает (возможно я не прав из-за отсутсвия полной инфы)

если всё же таблица _n2al отсаётся, то обновления в таком случае можно делать конструкцией:
Код:
REPLACE _n2al
SELECT id,title,replace
FROM _albums
 

Markus

Новичок
chira
Таблица _albums это дамп с сайта спонсора, приходится подстраиваться. Сначала считывать, потом отпарсивать имя и вставлять в свою таблицу _n2al
 

alexhemp

Новичок
Markus

А зачем читаешь из базы с LIMIT 1? Или у тебя просто ошибка?

Зачем тебе вообще count доставать?
делай while ($row=mysql_fetch_row($result)) и какая разница сколько рядов?

Какая вообще структура данных-то?
 

Markus

Новичок
Если не циклом делать то при запросе в 50 000 рядов, time request, не хватает время
 
Сверху