LINUX.ORG.RU

[mysql] Поиск повторяющихся строк

 


0

1

Доброго времени суток, лор

Пишу простой md5 хэшэр на кутях с хранением хэшэй в mysql

нужно искать повторы хэшэй в базе, моё гугл-фу выдало запрос

select * from hashes where filehash not in (select distinct filehash from hashes)

он, в принципе, работает

вот только после того, как я просканировал /etc и /usr/include (ну там просто много файлов), получил примерно 18к записей, натравил на базу этот запрос, мускуль ушёл в себя со 100% загрузки процессора...

структура базы:

CREATE TABLE `hashes` (                                                                                                                                              
  `path` varchar(256) NOT NULL,                                                                                                                                      
  `filehash` char(32) DEFAULT NULL,                                                                                                                                  
  PRIMARY KEY (`path`)                                                                                                                                              
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
таки вопрос: может, кто знает, как оптимизировать это дело?

★★★★

Последнее исправление: TERRANZ (всего исправлений: 1)

Ответ на: комментарий от Tanger

да
сначала отработает дистинкт - выведет все неповторяющиеся
потом отработает селект и выберет все, что не вошли в дистинкт

TERRANZ ★★★★
() автор топика
Ответ на: комментарий от TERRANZ

хм.. {«a», «a»} not in {«a»} = {«a»} странно.
не знал. спасибо.

Tanger ★★★★★
()

попробуй так:

select path, filehash, count(filehash) as dubcount
from hashes
group by filehash
having dubcount > 1

должно работать много быстрее

HeadInSky
()
Ответ на: комментарий от HeadInSky

вау, мгновенно отработало на 65к записей О_О
спасибо!

TERRANZ ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.