Autor Zpráva
quatzael
Profil
Podle návodu jsem zadal přímo do phpMyAdmin tento příkaz:
DELETE FROM t1 USING tabulka_result t1, tabulka_result t2 WHERE t1.num1=t2.num1 AND t1.num2=t2.num2 AND t1.num3=t2.num3 AND t1.id<t2.id

V tabulce mám jen sloupečky id (primary key), num1, num2, num3 a count.

Všechny sloupečky jsou integer, sloupečky num1, num2, num3 a count jsou jen dvouciferné hodnoty.

Počet řádků je v databázi asi 200 tis. přičemž duplicit by mělo být 11 na jeden unikátní řádek.

Je možný, že tohle trvá víc než půl hodiny?

Zadal jsem to a pořád mi to ukazuje Nahrávám..
juriad
Profil
quatzael:
Ano je to možné. Máš na tabulce nějaké indexy? Jako ideální vypadá kombinovaný index nad (num1, num2, num3), jinak databáze musí projít všech 40 000 000 000 kombinací a to trvá.

Další možností je položit dotaz pro vytvoření nové tabulky:
CREATE TABLE tabulka_result_nova AS
SELECT * FROM tabulka_result t
JOIN (
  SELECT MIN(id) FROM tabulka_result GROUP BY num1, num2, num3
) x ON x.id = t.id
Ale nevím, zda bude výkonější.
quatzael
Profil
juriad:
Aha. A nešlo by nějak udělat, aby request nechal první řádek po něm dalších 11 smazal, potom zase jeden nechal atd..??
Já mám ty data v tabulce takhle hezky setřízený. To by mělo být rychlý, ne? Ale jak to udělat??
Kajman
Profil
Jak dlouho trvá nalezení těch řádků na smazání?

SELECT Count(DISTINCT t1.id) smazat
FROM   tabulka_result t1,
       tabulka_result t2
WHERE  t1.num1 = t2.num1
       AND t1.num2 = t2.num2
       AND t1.num3 = t2.num3
       AND t1.id < t2.id  

Máte na tabulce nějaké další indexy kromě id? Na tuto úlohu by se hodil index přes tři sloupce (num1,num2,num3).
quatzael
Profil
Kajman:
Nevím, je to zatím seklý. Nemůžu tu tabulku ani smazat ani opravit..


quatzael:
žádný další indexy tam nejsou.. jen ty řádky, který jsem tady uvedl..


Je možný, že je to celý seklý a nejde ta tabulka smazat proto, že se pořád vykonává ten problematickej request?

Nejde to nějak ukončit?


quatzael:
Nejde to nějak ukončit?
Už to mám!! show processlist
Kajman
Profil
Ano je možné, že nalezení řádků a tedy smazání tvrá velice dlouho a tabulka je po tu doba zamknuta či zahlcena.

Pokud jste administrátorem databázového serveru, měl byste mít možnost proces killnout.
quatzael
Profil
Kajman [#4]:
Co tam v tom requestu dělá to "smazat"?? Nemá tam být například "AS smazat"??
tiso
Profil
quatzael: AS je nepovinné
quatzael
Profil
Kajman:
Pokud jste administrátorem databázového serveru, měl byste mít možnost proces killnout.
Už jsem přišel na to jak (bylo mi porazeno): show processlist!!


tiso:
AS je nepovinné
Aha


Kajman [#4]:
Každopádně v tom requestu asi má být DISTINCT t1.id, ne? t.id to nebere..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0