Оптимизация запроса с большим объемом данных - MySQL
Формулировка задачи:
Добрый день.
Прошу помощи у профессионалов по ускорению запроса для Mysql
Есть таблица email_subscribe с набором значений:
Необходимо получить дубликаты по полю "ekey", которые в дальнейшем можно удалить
Сделал 2 запроса, они выводят, список нужных дублей по полю "ekey", которые можно потом удалить...
Проблема в том, что при больших объемах данных (если в таблице email_subscribe будет 700 000 записей) эти запросы очень долго выполняются, не могу дождаться завершения запроса на локальном хосте при ~160 000 строк
Индексы по нужным полям таблицы email_subscribe поставил
Привожу explain запроса:
Привожу explain запроса:
В чем причина длительного выполнения обоих запросов?
id ekey 1 ключ1 2 ключ1 3 ключ2 4 ключ1 5 ключ1
SELECT t.* FROM email_subscribe t LEFT JOIN (SELECT id FROM email_subscribe GROUP BY ekey) as t2 ON t.id=t2.id WHERE t2.id IS NULL
select * from email_subscribe where id not in (SELECT id FROM email_subscribe GROUP BY ekey)
Результат двух запросов правильный и идентичный:
id ekey 2 ключ1 4 ключ1 5 ключ1
explain select * from email_subscribe where id not in (SELECT id FROM email_subscribe GROUP BY ekey)
explain SELECT t.* FROM email_subscribe t LEFT JOIN (SELECT id FROM email_subscribe GROUP BY ekey) as t2 ON t.id=t2.id WHERE t2.id IS NULL
Решение задачи: «Оптимизация запроса с большим объемом данных»
textual
Листинг программы
SELECT ekey, COUNT(*) FROM email_subscribe GROUP BY ekey HAVING COUNT(*) > 1
Объяснение кода листинга программы
SELECT ekey, COUNT(*) FROM email_subscribe
- здесь происходит выборка данных из таблицыemail_subscribe
по полюekey
и подсчет количества записей в каждой группе с помощью функцииCOUNT(*)
.GROUP BY ekey
- здесь данные группируются по полюekey
, то есть в каждой группе будут все записи, относящиеся к одному и тому же значению поляekey
.HAVING COUNT(*) > 1
- здесь происходит фильтрация групп, оставляя только те, в которых количество записей больше одного.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д