|
|
|
| Можно както ускорить процесс удаления данных?
например цикл от 0 до 100
{
unlink($path_ori);
unlink($path_small);
$sql = "DELETE FROM `photos` WHERE filename='" . $value . '\' and status <>'.STATUS_ARCHIVE.' LIMIT 1';
mysql_query($sql)
}
выполняется 60 секунд!!!
пробовал сеначала делать SELECT id и потом DELETE where id=.....
скорость выполнения тоже медленная.
Как можно ускорить?
P.S. В таблице более 2 миллионов записаей. | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 10:58)
| | Нормальные люди обращаются к строкам таблицы по первичным ключам. В крайнем случае - по индексированным полям.
И уж всяко - не в цикле. | |
|
|
|
|
|
|
|
для: Trianon
(01.09.2009 в 11:51)
| | А как мне подсунуть список значений для удаления в один запрос? | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 12:07)
| | WHERE поле IN (список) | |
|
|
|
|
|
|
|
для: Trianon
(01.09.2009 в 12:08)
| | А есть в длинне SQL запроса ограничения?
например можно в WHERE IN указать 10.000 значений? | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 14:09)
| | может у вас с логикой кода что-то не то?
Опишите что вы хотите сделать, в смысле подробнее про удаление файлов что, зачем и почему удаляете. | |
|
|
|
|
|
|
|
для: Valick
(01.09.2009 в 14:14)
| | В POST запросе приходят имена файлов которые нужно удалить.
Обычно таких фалов за раз более 100....
Получается в цикле я пробегаюсь по массиву и поочерёдно удаляю файл... удаляю запись в базе данных об этом файле. и так сто раз... Эта процедура занимает 60 секунд... выходит удаление 1000 файлов заёмёт 600 секунд... а это очень долго. вот думал кто что подскажет. | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 15:25)
| | и что кто-то сидит и ставит галочки напротив имён 100 файлов руками? | |
|
|
|
|
|
|
|
для: Valick
(01.09.2009 в 15:33)
| | если б ставил галочки - всё было бы проще. Первичный ключ и вся недолга.
А тут кто-то похоже руками имена файлов в форму вписывает. | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 15:25)
| | ну положим 100 и даже 200 это еще не 10000.
Да и 10000 можно в один запрос включить. Если это первичные (или хотя бы уникальные) ключи - запросто. | |
|
|
|
|
|
|
|
для: Trianon
(01.09.2009 в 15:38)
| | Да ключи первичные. Но индексы могут идти не подряд.
можете привести пример такво запроса ? | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 15:55)
| | По какому критерию происходит выборка удаляемых файлов
(вы уж меня простите, но жутко интересно) | |
|
|
|
|
|
|
|
для: Valick
(01.09.2009 в 16:00)
| | Временной диапазон.
например все начиная с 2009-09-01 04:03:15 и заканчивая 2009-09-01 04:24:01
Но в скрипт передается список имен файлов этих фотографий за это время. | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 16:19)
| | ничё не понимаю... в чём фишка? почему сразу в запросе на удаление не указать этот временной диапазон? | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 15:55)
| | типа так
<?php
// Принимаем данные POST (надеюсь массив передаёте)
if(isset($_POST[id]) && is_array($_POST[id])) $id=$_POST[id]; else exit;
// Обрабатываем массив данных (это как уж захотите так и обработаете)
foreach($id as $key=>$value){
$value=trim($value);
if(is_numeric($value) && strlen($value)<20) $new[]=$value;
}
// Формируем строку из массива для использования в запросе
$srting=implode(",",$new);
// Формируем запрос
$query="DELETE FROM `photos` WHERE id IN($srting)";
$res=mysql_query($query);
?>
|
но судя по последним постам, что-то там у вас тут не так, и вам этот код не понадобится скорее всего
___
блин ступил с кодом щас поправлю) | |
|
|
|
|
|
|
|
для: Valick
(01.09.2009 в 16:31)
| | И в этомже цикле foreach удалять файлы? или может быстрее было бы удалить файлы средством самой SQL?
как лучше? | |
|
|
|
|
|
|
|
для: gus
(03.09.2009 в 16:38)
| | А прочесть текст скрипта? | |
|
|
|
|
|
|
|
для: Valick
(01.09.2009 в 16:31)
| | меж тем отступы можно было и расставить :-/ | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 15:55)
| | > Но индексы могут идти не подряд.
Вот уж совсем не требуется.
>можете привести пример такво запроса ?
так я ж написал.
DELETE FROM tbl WHERE id IN (1, 20, 5); | |
|
|
|
|
|
|
|
для: gus
(01.09.2009 в 14:09)
| | откуда Вы возьмете 10 000 ключей, кроме как не из базы?
Ограничения есть на размер текста запроса в целом. | |
|
|
|