Оптимизация запроса с большим объемом данных - 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
- здесь происходит фильтрация групп, оставляя только те, в которых количество записей больше одного.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д