Есть таблица на сотни тысяч записей, периодически требуется удалять от нескольких сотен до нескольких тысяч записей.
Если удалять по одной в цикле - справляется довольно шустро.
Запрос
SQL |
DELETE FROM table WHERE id IN (5,7,9,25,37, ... 250123) |
Цитата (Alchemist @ 10.12.2008 - 02:52) |
запрос именно вида IN (1,2,3,4,...) |
Цитата (vasa_c @ 10.12.2008 - 12:07) |
Сколько id-ов в списке? |
Цитата (FatCat @ 9.12.2008 - 23:23) |
от нескольких сотен до нескольких тысяч |
Цитата |
...configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running |
Цитата (Alchemist @ 10.12.2008 - 16:00) |
Вылетает по таймауту ??? Так это проблема скрипта, а не SQL ! |
Цитата (Alchemist @ 10.12.2008 - 20:07) |
SQL запрос в принципе не может быть причиной вылета, т.к. его время не учитывается при вычислении таймаута. |
Цитата (kirik @ 10.12.2008 - 20:58) |
попробуй чисто для проверки - сделать вывод готового запроса на экран (не исполняя его) и затем запустить через простенький скрипт работы с БД, или через phpmyadmin. |
Цитата (Alchemist @ 10.12.2008 - 17:07) |
Бесконечный цикл, например |
Код |
$idz = ""; $pack_query = $DB->query("SELECT id, ..... FROM ibf_posts WHERE topic_id =".$this->topic['tid']." order by pid desc"); while ($post = $DB->fetch_row($pack_query)) { $idz .= $post['id']."," } $idz .= "endstring"; $idz = str_replace(",endstring","",$idz); |
Цитата (Sylex @ 10.12.2008 - 18:10) |
уверен? |
Цитата (MySQL Manual) |
The output from EXPLAIN shows ALL in the type column when MySQL uses a table scan to resolve a query. This usually happens under the following conditions: ... You are comparing indexed columns with constant values and MySQL has calculated (based on the index tree) that the constants cover too large a part of the table and that a table scan would be faster. |
Цитата (phpMyAdmin) |
Showing rows 0 - 29 (2,329,472 total, Query took 0.3661 sec) |
SQL |
DELETE FROM r USING phpbb_search_results AS r LEFT JOIN phpbb_sessions AS s ON s.session_id = r.session_id WHERE s.session_id IS NULL; |