Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie duplikatów a optymalne rozwiązanie
Forum PHP.pl > Forum > PHP
djgarsi
Witam. Mam pytanie do osób posiadających spore bazy (większe niż 100tys rekordów).
Otóż interesuje mnie, w jaki sposób usuwacie ewentualne duplikaty?
Moja baza rośnie w tempie około 1tys rekordów na 24h. Wyszukałem w sieci pewne rozwiązanie jednak jest ono strasznie nieoptymalne.
  1. $Zapytanie_usun = 'DELETE FROM pliki USING pliki, pliki AS vpliki WHERE (pliki.id > vpliki.id) AND (pliki.link = vpliki.link)';
  2. mysql_query($Zapytanie_usun);


Pytanie 1. Czy da się to zapytanie zoptymalizować? Czy dać sobie spokój z tym zapytaniem i szukać czegoś innego?
Pytanie 2. Czy jest sens bawienia się z przepisywaniem rekordów (po posortowaniu bez duplikatów)?
erix
Cytat
Moja baza rośnie w tempie około 1tys rekordów na 24h. Wyszukałem w sieci pewne rozwiązanie jednak jest ono strasznie nieoptymalne.

Aaaaaale potwór... O.o'. Takie coś powinno góra kilka sekund zająć na dobrze poindeksowanej bazie.

Co explain pokazuje?

GROUP BY na link + HAVING COUNT(id)>1 i będziesz miał linki, które występują więcej niż raz. Wtedy spokojnie wyciągniesz same id.
alegorn
uuuf.

1. zaloz duplikat tabeli obok
2. zaloz klucz unique na wybrana kolumne
3. wykonaj
  1. INSERT IGNORE INTO nowa_tabela
  2. SELECT * FROM stara tabela


j.
djgarsi
Cytat(erix @ 7.08.2012, 12:57:05 ) *
Aaaaaale potwór... O.o'. Takie coś powinno góra kilka sekund zająć na dobrze poindeksowanej bazie.

Pierwszy raz mam do czynienia z takim przyrostem danych, więc dla mnie to spora baza.

Cytat(erix @ 7.08.2012, 12:57:05 ) *
GROUP BY na link + HAVING COUNT(id)>1 i będziesz miał linki, które występują więcej niż raz. Wtedy spokojnie wyciągniesz same id.


  1. SELECT id FROM `pliki` GROUP BY `link` HAVING COUNT(id)>1

takie zapytanie będzie optymalne?
erix
EXPLAIN prawdę Ci powie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.