Я запускаю запрос ниже, чтобы очистить таблицу, но у меня есть статус «Отправка данных» в течение нескольких часов. Это база данных MySQL.SQL-запрос слишком длинный
DELETE TABLE_INIT FROM DEM_annonces_urlproduit TABLE_INIT
LEFT OUTER JOIN (
SELECT MIN(id_url) as id, id_ann
FROM DEM_annonces_urlproduit
GROUP BY id_ann
) AS TABLE_1
ON TABLE_INIT.id_url = TABLE_1.id
WHERE TABLE_1.id IS NULL
Таблица имеет следующую структуру
id_url | id_ann | url | eaa
Мой первичный ключ является id_url и таблицы проиндексированы на id_ann.
У меня есть огромное количество идентичных данных, которые я хочу удалить, и установите id_ann в качестве первичного ключа, чтобы исправить мою проблему. В таблице есть 13M строк.
Нужно ли это делать в течение нескольких часов? Каков наилучший способ очистки стола?
Благодаря
Добавить этот показатель 'ALTER TABLE DEM_annonces_urlproduit ADD KEY (id_ann, id_url)' Это позволит подзапросу использовать бесплатный индексный сканер, каждый из которых эффективен. Это займет некоторое время для 13-мильных строк, поэтому будьте терпеливы. – Mihai
Мне всегда нравится видеть прогресс таких «огромных» операций, поэтому я бы, вероятно, включил его в функцию и разделил на части с помощью некоторого механизма ведения журнала. –