Оптимизация запроса с большим объемом данных - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый день. Прошу помощи у профессионалов по ускорению запроса для Mysql Есть таблица email_subscribe с набором значений:
id      ekey
1       ключ1
2       ключ1
3       ключ2
4       ключ1
5       ключ1
Необходимо получить дубликаты по полю "ekey", которые в дальнейшем можно удалить Сделал 2 запроса, они выводят, список нужных дублей по полю "ekey", которые можно потом удалить...
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
Проблема в том, что при больших объемах данных (если в таблице email_subscribe будет 700 000 записей) эти запросы очень долго выполняются, не могу дождаться завершения запроса на локальном хосте при ~160 000 строк Индексы по нужным полям таблицы email_subscribe поставил Привожу explain запроса:
explain select * from email_subscribe
where id not in (SELECT id FROM email_subscribe GROUP BY ekey)
Привожу explain запроса:
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

Объяснение кода листинга программы

  1. SELECT ekey, COUNT(*) FROM email_subscribe - здесь происходит выборка данных из таблицы email_subscribe по полю ekey и подсчет количества записей в каждой группе с помощью функции COUNT(*).
  2. GROUP BY ekey - здесь данные группируются по полю ekey, то есть в каждой группе будут все записи, относящиеся к одному и тому же значению поля ekey.
  3. HAVING COUNT(*) > 1 - здесь происходит фильтрация групп, оставляя только те, в которых количество записей больше одного.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5