Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Usuwanie duplikatów a optymalne rozwiązanie
djgarsi
post
Post #1





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

Ostrzeżenie: (0%)
-----


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)?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.
Go to the top of the page
+Quote Post
alegorn
post
Post #3





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
djgarsi
post
Post #4





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




EXPLAIN prawdę Ci powie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:45