Как найти значение повторения в таблице MySQL с 30 миллионами строк - PullRequest
0 голосов
/ 30 января 2019

В 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, спасибо

Ответы [ 2 ]

0 голосов
/ 30 января 2019

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

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).

0 голосов
/ 30 января 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...