2017-02-13 36 views
2

У меня есть таблица с миллионами строк. Мне нужно удалить все строки, у которых есть определенный столбец, равный одному из значений из 15k длинного списка.Удаление нескольких записей с разными идентификаторами из большой таблицы без использования цикла mysql php

Сейчас у меня есть это установка, как:

$list = array(
"Item1", 
... 
"Item15000" 
); 

foreach ($list as $item){ 

$sql = "Delete from table where `item`='$item'"; 

if ($con->query($sql) === TRUE) { 
      echo "$item removed from table <br>"; 
     } else { 
      echo "Error removing $item from shop_meta: " . $con->error . "<br>"; 
     } 

} 

В своем нынешнем состоянии она занимает много много часов, чтобы сделать это, и я должен сделать это для многих других аналогичных таблиц.

Как ускорить или оптимизировать запрос? Есть ли способ запросить их все сразу, чтобы сделать это быстрее?

ответ

1

Поместите эти 15к список в таблице, а затем присоединиться к его

Delete t 
from your_table t 
join temp_table tt on t.item = tt.delete_value 
+0

ли временная таблица должна содержать только один столбец 'delete_value'? – Acidon

+1

Да, ему больше не нужно. Если у вас уже есть эти значения в БД, вы можете присоединиться к тому, что они находятся в БД –

+0

. Ах, это прекрасно, и в ФАКТЕ У меня уже есть таблица со списком элементов, которые мне нужно отфильтровать! Большое спасибо, мастер! – Acidon

1

План A:

DELETE FROM t WHERE item IN (...long list of ids...) 

Plan B:

Do план А, но в ломти 1000 идентификаторами , Это будет дружелюбнее для других пользователей и репликации (если необходимо). Предложите работу с autocommit=ON.

More tips сверху большой удаление.

 Смежные вопросы

  • Нет связанных вопросов^_^