Как найти значение повторения в таблице MySQL с 30 миллионами строк

0

В Mysql у меня есть таблица с двумя столбцами (id, uuid). Затем я вставил в него 30 миллионов значений. (PS: UUID может повториться)

Теперь я хочу найти значение повторения в таблице с помощью грамматики Mysql, но sql потратил слишком много времени.

Я хочу выполнить поиск по всем столбцам, но это занимает много времени, поэтому я попытался запросить первый миллион строк, на это ушло 8 секунд.

Затем я попытался с 10 миллионами строк, это потратило 5 минут, затем с 20 миллионами строк сервер, кажется, умер.

select count(uuid) as cnt
from uuid_test
where id between 1
and 1000000
group by uuid having cnt > 1;

Любой может помочь мне оптимизировать SQL, спасибо

  • 1
    Ваша таблица имеет 3000-ваттные колонки?
  • 1
    Создать в индексе по столбцу uuid. Построение займет много времени, но выбор / группировка по запросам станет быстрее.
Показать ещё 4 комментария
Теги:

2 ответа

1

Попробуйте этот запрос,

SELECT uuid, count(*) cnt FROM uuid_test GROUP BY 1 HAVING cnt>1;

Надеюсь, поможет.

  • 0
    спасибо, все работает, нужно всего 10 секунд. Похоже, что условия Where и Between вызывают слишком медленный запрос.
0

Часто самый быстрый способ найти дубликаты использует коррелированный подзапрос, а не агрегирование:

select ut2.*
from uuid_test ut2
where exists (select 1
              from uuid_test ut2
              where ut2.uuid = ut.uuid and
                    ut2.id <> ut.id
             );

Это может использовать индекс uuid_test(uuid, id).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню