2014-12-17 3 views
0

Я пытаюсь удалить много строк, используя поиск первичного ключа.Удаление строк в MySQL с использованием индекса первичного ключа

например.

DELETE FROM t1 WHERE t1.pid IN (SELECT pid FROM ...); 

Здесь pid является первичным ключом таблицы t1, но он не использует индекс в случае удаления.
Внутренний запрос возвращает слишком много строк, поэтому весь запрос занимает слишком много времени, так как внешний не использует индекс.

Как я могу удалить эти строки быстрее?

+0

«, но он не использует индекс в случае удаления ", как вы уверены в этом? Как вы проверяете? –

+0

Если вы попытаетесь удалить основную часть таблицы, преимущество использования индекса не будет. – jarlh

+0

Возможный дубликат [Оптимизация оператора удаления MySQL] (http://stackoverflow.com/questions/1987375/mysql-delete-statement-optimization) –

ответ

0

Вы должны избегать подзапроса, но использовать JOIN вместо:

DELETE t1 
FROM t1 INNER JOIN t2 ON t1.pid = t2.pid 
[WHERE .....] 

Естественно t2 это таблица, вы получаете идентификатор процесса из вашего подзапроса; Рассмотрим также можно добавить пункт WHERE, чтобы ограничить выбранный (и поэтому удаленные) ИДП ...
считают также, что pid столбец t2 таблицы должны быть проиндексированы для ускорения запроса ...

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